为什么我的浅拷贝实现了深拷贝的效果?
改变obj2的k2和k3属性,为什么obj1完全不受影响?
function shallowClone(obj){
let newObj = {};
for(const key in obj){
newObj[key] = obj[key];
}
return newObj;
}
let obj1 = {
k1:123,
k2:{name:'k2'},
k3:[1,2,[3,4]]
};
let obj2 = shallowClone(obj1);
obj2.k2 = {};
obj2.k3 = [1,2,3,4];
console.log(obj1);
console.log(obj2);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
两个概念:
浅拷贝
与深拷贝
都是针对引用类型,浅拷贝是只复制了这份引用,导致对拷贝后的值作出的修改,也会影响原对象所以,你对深浅拷贝的检验方式本质上是有问题的:
这个才是正确的检验方式
得先搞明白浅拷贝和深拷贝的概念吧————其实只用了解“引用”,这两者就都明白了。
在你的代码里,你可以尝试拷贝后修改obj2.k3[0],再打印比对。
并没有,你对什么是引用类型理解错误。
你这都给
obj2.k2
、obj2.k3
重新赋值了,根本也不是原来的对象引用了。抛开浅拷贝的外壳,你这段代码跟下面的没有本质区别: