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 数组正在更改?
我错过了什么?
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 数组正在更改?
我错过了什么?
正如系统所指出的,ob.prop = arr
基本上只是为访问arr
. 因此,当您修改时,ob.prop
您正在修改同样arr
引用的对象。
编辑:要复制数组,请看一下这个问题:
var arrCopy = arr.slice();
正如 Jorge 所提到的,发生这种情况是因为obj.prop
只是对 , 的引用arr
,所以arr
并且obj.prop
将指向内存中的同一个地方。因此,如果您更改其中任何一个,内存中的值(另一个指向)都会更改,从而同时更改两者。
如果你想避免这种情况,你需要做一个深拷贝。这会将数组的值复制到一个新数组中,该数组obj.prop
将指向。
这里有一个如何在 javascript 中执行此操作的演练。