1
var arr = new Array();
arr[0] = "a";
var ob = new Object();
ob.prop = arr;
ob.prop[0] = "b";
//Console log arr[0] returns b

出于某种原因,当我更改 ob.prop 时,arr 数组正在更改?

我错过了什么?

4

2 回答 2

1

正如系统所指出的,ob.prop = arr基本上只是为访问arr. 因此,当您修改时,ob.prop您正在修改同样arr引用的对象。

编辑:要复制数组,请看一下这个问题

var arrCopy = arr.slice();
于 2013-03-13T23:27:38.783 回答
1

正如 Jorge 所提到的,发生这种情况是因为obj.prop只是对 , 的引用arr,所以arr并且obj.prop将指向内存中的同一个地方。因此,如果您更改其中任何一个,内存中的值(另一个指向)都会更改,从而同时更改两者。

如果你想避免这种情况,你需要做一个深拷贝。这会将数组的值复制到一个新数组中,该数组obj.prop将指向。

这里有一个如何在 javascript 中执行此操作的演练。

于 2013-03-13T23:37:32.987 回答