美文网首页
JavaScript深拷贝和浅拷贝

JavaScript深拷贝和浅拷贝

作者: winerss | 来源:发表于2019-03-21 10:37 被阅读0次

1、JavaScript的数据类型:基本数据类型、引用数据类型。

基本数据类型:保存在栈内存的简单数据段(undefined,boolean,number,string,null)。

引用数据类型:Array,对象,Function保存在堆内存中。

浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存

深拷贝:复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变

2 、递归的方法实现深拷贝

functiondeepclone(obj){

        let objClone = Array.isArray(obj) ? [] : {};

        if (obj && typeof obj === "object") {

            for (key in obj) {

                //if (obj.hasOwnProperty(key)) {  //也可以不加  

                        if (obj[key] && typeof obj[key] === "object") {

                            objClone[key] = deepclone(obj[key])

                        } else {

                            objClone[key] = obj[key]

                        }

                    //}           

             }

        }

        return objClone

    }

    var a = [1, 2, 3, 4];

    var b = deepclone(a);

    a[0] = 8    console.log(a, b);

Array.isArray(obj):ECMAScript 5.1 (ECMA-262)   考虑到的兼容性,可以用下面的方法实现较好的兼容

   if (!Array.isArray) {

      Array.isArray = function(arg) {

            return Object.prototype.toString.call(arg) === '[object Array]';

       };

    }

3、用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象

functiondeepclone(obj){

      var _obj = JSON.stringify(obj);

      var cloneObj = JSON.parse(_obj);

      return cloneObj

    }

    var a =[1,2,3,4];

    var b= deepclone(a);

    a[0]=8    console.log(a,b);

相关文章

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • 深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝

    JavaScript中的浅拷贝与深拷贝 学了这么长时间的JavaScript想必大家对浅拷贝和深拷贝还不太熟悉吧,...

  • js浅拷贝和深拷贝

    javaScript的变量类型 javaScript的变量类型基本类型:引用类型: 浅拷贝和深拷贝的区分 浅拷贝浅...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • JavaScript深拷贝、浅拷贝

    JavaScript深拷贝、浅拷贝 浅拷贝:浅拷贝只是复制了内存地址,如果原地址中的对象改变了,浅拷贝出来的对象也...

  • 初探浅拷贝&深拷贝

    思考 这个代码为什么具有深拷贝作用 浅拷贝与深拷贝 在JavaScript中,对于Object和Array这类引用...

  • 理解JavaScript中浅拷贝和深拷贝的区别

    要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型 JavaScript...

  • 浅拷贝和深拷贝

    今天来讨论一下javascript中的浅拷贝和深拷贝。 首先我们先来看一下两个问题: 1.什么叫浅拷贝和深拷贝? ...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

网友评论

      本文标题:JavaScript深拷贝和浅拷贝

      本文链接:https://www.haomeiwen.com/subject/ktgfvqtx.html