【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

请问如果我们对每一层都进行浅拷贝是否等同于深拷贝?谢谢

阅读 1.8k
2 个回答

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题