浅谈对象的复制拷贝

var t1 = {a:1,b:2}

像这样一般的对象复制我们常使用:

var t2 = Object.assign({},t1);

t2.a = 2;

console.log(t1,t2)//  t1:{a:1,b:2}   t2:{a:2,b:2};

或者 var t2 = {...t1};

t2.a = 2;

console.log(t1,t2)//  t1:{a:1,b:2}   t2:{a:2,b:2};

这两种方法使用都是不会影响原来的对象的属性值的,但是当被复制的对象结构里面还有对象时,结果就不一样了

var  p1 = {a:1,b:{name:'piter',age:'30'}};

var p2 = Object.assign({},p1);

p2.b.name= 'lisa';

console.log(p1,p2);

结果输出都是{a:1,b:{name:'lisa',age:'30'}};

当修改被复制对象的里面的object部分时,会连带影响,经各种尝试,最后发现,先把对象字符串化,JSON.stringfy

然后把字符串JSON化,JSON.parse一下,再对parse后的对象进行操作就不会相互影响拉。

具体为什么修改被复制对象的里面的object部分会受影响还没探索出来,如有同道中人能解惑,还请不吝赐教

原文地址:https://www.cnblogs.com/lr-blog/p/9451150.html