这是代码,根据我读过的书,它指出arr2
可以是深层副本,这意味着分配新内存来存储对象,在本例中为{{ 1}}。
arr2
答案 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.