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

2018-04-20  本文已影响0人  安逸的蓝鲸

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

            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"}
上一篇 下一篇

猜你喜欢

热点阅读