【问题标题】:What is the difference between deep and shallow cloning?深克隆和浅克隆有什么区别?
【发布时间】:2013-04-28 19:38:02
【问题描述】:

如果我使用 splice 克隆一个数组,它会给我一个浅拷贝,缺少什么?看来我得到了多级数组,所以如果我理解正确的话,它不是数组的深度。

【问题讨论】:

    标签: javascript arrays clone


    【解决方案1】:

    了解深克隆和浅克隆的最佳方法是:

    1. 在浅克隆中,如果引用对象存在,则不会 连载。

    2. 在深度克隆中,对象引用和当前都序列化。 取而代之的是,有很多事情像 池、对象引用等

    【讨论】:

      【解决方案2】:

      在浅拷贝中,如果数组(或对象属性)是对对象的引用,则只复制引用。

      var a = [{name: "Bob"}];
      var b = a.slice(0);
      b[0].name = "Tom";
      alert(a[0].name); // "Tom"
      

      “深”副本确保结果包含原始数据结构中所有引用对象的新副本。执行深层复制可能会出现问题,具体取决于所涉及对象的性质。

      【讨论】:

      • thanx,这意味着在深度克隆中,所有值都被复制并失去与原始对象的连接?
      • 是的 - 在深层副本中,新的(结果)数组或对象将拥有自己的原始所有内容的新副本。通常,这也是递归完成的。
      猜你喜欢
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2017-09-17
      • 2011-01-13
      • 1970-01-01
      • 2011-09-05
      • 2011-12-22
      相关资源
      最近更新 更多