js中深拷贝和浅拷贝

作者:邹润阳
链接:https://www.zhihu.com/question/23031215/answer/46220227
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

感觉大家好像都没有正面回答题主的问题呢。题主问的是深复制和浅复制的区别,大家答的却都是如何实现深复制。我来答一发~

先抛开jQuery,上几句简单的代码:
var obj = { a:1, arr: [1,2] };
var obj1 = obj;            //浅复制
var obj2 = deepCopy(obj);  //深复制

因为JavaScript存储对象都是存地址的,所以浅复制会导致 obj 和 obj1 指向同一块内存地址,大概的示意图如下。而深复制一般都是开辟一块新的内存地址,将原对象的各个属性 逐个复制出去。如下图所示:

因此,如果你使用浅复制,你会发现:

obj.a = 2;
console.log(obj1.a); //输出2

--------
Update 2015.11.1:

之前写了一篇相关的文章《 深入剖析 JavaScript 的深复制》。涉及到 jQuery, underscore, lodash 等库关于深复制的实现,有兴趣可以看看。
来自:https://www.zhihu.com/question/23031215
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值