为什么这个javascript函数会创建一个深层副本而不是浅层副本?

时间:2015-08-29 15:02:47

标签: javascript arrays

这是代码,根据我读过的书,它指出arr2可以是深层副本,这意味着分配新内存来存储对象,在本例中为{{ 1}}。

arr2

1 个答案:

答案 0 :(得分:4)

不是深层副本。是的,为数组本身及其元素分配了新内存,但如果对象是数组的一部分,则将它们复制为引用。不会创建新对象。

如果是深拷贝,更改arr1中存储的对象不会更改复制到arr2的对应对象,但确实如此:

function copy(arr1, arr2) {
  for (var i = 0; i < arr1.length; ++i) {
    arr2[i] = arr1[i];
  }
}

var arr1 = [1, 2, { 'foo': 'bar' }];
var arr2 = [];

copy(arr1, arr2);

console.dir(arr1);
console.dir(arr2);

arr1[2].foo = 'changed';

console.dir(arr1);    // changed, of course
console.dir(arr2);    // also changed. shallow copy.