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数组正在被更改我错过了什么?
答案 0 :(得分:1)
正如系统指出的那样,ob.prop = arr
基本上只是为访问arr
引用的对象提供了另一个名称。因此,当您修改ob.prop
时,您正在修改arr
也引用的同一对象。
编辑:要复制数组,请查看this question:
var arrCopy = arr.slice();
答案 1 :(得分:1)
正如Jorge所说,这种情况正在发生,因为obj.prop
只是对arr
的引用,因此arr
和obj.prop
将指向内存中的相同位置。因此,如果你改变了,那么内存中的值(另一个指向的值)会发生变化,从而改变两者。
如果您希望避免这种情况,则需要执行深层复制。这会将数组的值复制到一个新数组中,obj.prop
将指向该数组。
有关如何在javascript here中执行此操作的演练。