节点/ Javascript设置对象属性到数组不工作?
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中如何做到这一点的演练。