【JS】如果对每一层都用 展开运算符 ... 是否等同于深拷贝呢?
let obj = {
a: {
b: {},
c: {}
},
a2: {
a: {}
}
};
let _obj = { ...obj, a: { ...obj.a, b: {...obj.a.b} }, a2: { ...obj.a2 } };
console.log(_obj.a.b === obj.a.b); // false
请问如果我们对每一层都进行浅拷贝是否等同于深拷贝?谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
等同的
对与 object 和 array,浅拷贝会拷贝指针,深拷贝会复制新版本
你这里全部都用
{...obj}
的方式复制了,确实就是复制新版本了提问代码中
b: {...obj.a.b}
其实你已经知道了复杂类型在数据结构中的具体位置,通用做法是利用递归去做。等同于,但没什么用,因为深拷贝需要判别每一级的每一个属性,这用展开符做不到,而使用for去遍历又不需要展开符了