首页 > 其他 > 详细

浅拷贝和深拷贝

时间:2019-05-17 18:14:44      阅读:81      评论:0      收藏:0      [点我收藏+]

含义:

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

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

浅拷贝:

  =

  例子:

    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}}

 

浅拷贝和深拷贝

原文:https://www.cnblogs.com/yuNotes/p/objectCopy.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!