数组与对象的深浅复制方法

一 基本数据类型:互不影响

            var a=3;
            var b=a;
            a=4;
            console.log(a,b)  //4,3

二 引用类型值:
1.浅复制:复制的是地址指针,不会开辟新的地址空间,改变一个,另一个也会受影响
(1)数组浅复制,通过直接赋值:

             var a=[1,2,3];
             var b=a;
             console.log(a,b);  //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  //[1,2,3,4]  [1,2,3,4]

(2)对象浅复制,通过直接赋值:

            var a={name:'bob',age:'23'};  
             var b=a;
             console.log(a,b);  //{name: "bob", age: "23"}   {name: "bob",age: "23"}
             a.age=22;
             console.log(a,b);   //{name: "bob", age: 22}   {name: "bob", age: 22}

2.深复制:复制的是地址指针,开辟新的地址空间,互不影响
(1) 数组深复制:
方法1,slice方法:

             var a=[1,2,3];
             var b=a.slice(0);
             console.log(a,b); //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  //[1,2,3,4]  [1,2,3]

方法2,concat方法:

             var a=[1,2,3];
             var b=a.concat();
             console.log(a,b);  //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  //[1,2,3,4]  [1,2,3]

方法3,遍历方法:

             var a=[1,2,3];
             var b=[];
             for(var i=0;i<a.length;i++)
               {
                           b[i]=a[i];
                }
             console.log(a,b);  //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  // [1,2,3,4]  [1,2,3]

(2)对象深复制:
方法1,遍历:

             var a={name:'bob',age:'23'};
             var b={};
             for (var i in a){
             b[i]=a[i];
              }
             console.log(a,b); //{name: "bob", age: "23"}   {name: "bob", age: "23"}
             a.age=22;
             console.log(a,b); //{name: "bob", age: "22"}   {name: "bob", age: "23"}

方法2,JSON的解析和字符串化方法:

             var a={name:'bob',age:'23'};
             var b=JSON.parse(JSON.stringify(a));
             console.log(a,b); //{name: "bob", age: "23"}   {name: "bob", age: "23"}
             a.age=22;
             console.log(a,b); //{name: "bob", age: "22"}   {name: "bob", age: "23"}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。