对象赋值如何能够做到不影响原对象

一、引言

最近在写微信小程序项目的时候,第一次接触到了 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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注