【JS】如果对每一层都用 展开运算符 ... 是否等同于深拷贝呢?

发布于 2022-09-13 01:08:05 字数 298 浏览 13 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

再见回来 2022-09-20 01:08:05

等同的
对与 object 和 array,浅拷贝会拷贝指针,深拷贝会复制新版本
你这里全部都用 {...obj} 的方式复制了,确实就是复制新版本了

提问代码中 b: {...obj.a.b} 其实你已经知道了复杂类型在数据结构中的具体位置,通用做法是利用递归去做。

爱的故事 2022-09-20 01:08:05

等同于,但没什么用,因为深拷贝需要判别每一级的每一个属性,这用展开符做不到,而使用for去遍历又不需要展开符了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文