一、引言
最近在写微信小程序项目的时候,第一次接触到了 JavaScript。
于是乎,在一个场景中,我写了如下的代码:
var a = {'name': 'wangying'}; var b = a; b.name = 'yingwang'; console.log(a.name);
结果我惊喜的发现,a 对象里面的 name 居然 也变成了 yingwang。
这是为什么呢?
二、探索
经过我的探索,发现原来 JavaScript 中对象的赋值是默认引用赋值的,如果你想要复制赋值,则必须要重新分配对象,使用如下代码即可避免此问题:
var a = {'name': 'wangying'}; var b = Object.assign({}, a); b.name = 'yingwang'; console.log(a.name);
此时即可看到 a.name 的值并没有发生变化了。
三、深拷贝
上面我们使用Object.assign是浅拷贝,对于多级内的对象,还是使用了数据引用共享,深拷贝就是完全的复制,而成为2个不相关的对象, 可以用JSON来实现,代码如:
var b = JSON.parse(JSON.stringify(a));
这种方案仅在对象内部没有方法的时候才可行,或者使用JQUERY
var a = {}; var b = { name : { age : 30 } }; 浅拷贝 $.extend( a , b ); 加入参数true后就是深拷贝 $.extend( true , a , b );
Enjoy JavaScript,
To be Stronger:)
版权声明:本文为CSDN博主「曾经去过跨越一个小时的地方」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012814856/article/details/81078279