浅拷贝和深拷贝

含义:

  对象浅拷贝:仅仅复制对象的引用,而不是复制对象本身

  对象深拷贝:把复制的对象所引用的全部对象都复制一遍,而不是单纯的引用

浅拷贝:

  =

  例子:

    var obj1={a:0,b:{c:0}};

    var obj2=obj1;

    obj1.a=1;

    console.log(obj1);  //{a:1,b:{c:0}}

    console.log(obj2);  //{a:1,b:{c:0}}

    obj2.a=2;

    console.log(obj1);  //{a:2,b:{c:0}}

    console.log(obj2);  //{a:2,b:{c:0}}

    当改变obj1的时候obj2里面的值也改变了,由此可以看出obj2只是对obj1的一个引用,两个变量指向的数据存放的地址是一样的(例如:)

    

    所以不管obj1改变还是obj2改变,两者都会同时改变

深拷贝:

  Object.assign(target,...source):target为目标对象,source为源对象,返回目标对象

  例子:

    var obj1={a:0,b:{c:0}};

     var obj3=Object.assign({},obj1);

    obj1.a=1;

    console.log(obj1); //{a:1,b:{c:0}}

    console.log(obj3); //{a:0,b:{c:0}}

    obj3.a=3;

    console.log(obj1); //{a:1,b:{c:0}}

    console.log(obj1); //{a:3,b:{c:0}}

    第一层的改变通过这种拷贝是不会影响的,但是第二层以后还是受到了影响:

 obj1.b.c=4;

 console.log(obj1); //{a:1,b:{c:4}}

    console.log(obj3); //{a:3,b:{c:4}}

    还是会影响,所以应该使用

    JSON.parse(JSON.stringify(XXXX))

    var obj4=JSON.parse(JSON.stringify(obj1))拷贝所有层级

    例子:

 var obj1={a:0,b:{c:0}};

    var obj4=JSON.parse(JSON.stringify(obj1));

    obj4.b.c=5;

    console.log(obj1); //{a:0,b:{c:0}}

    console.log(obj4); //{a:0,b:{c:5}}

 

posted on 2019-05-17 18:00  小雨子1993  阅读(130)  评论(0编辑  收藏  举报

导航