节点/ Javascript设置对象属性到数组不起作用?

时间:2013-03-13 23:14:38

标签: javascript node.js

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数组正在被更改

我错过了什么?

2 个答案:

答案 0 :(得分:1)

正如系统指出的那样,ob.prop = arr基本上只是为访问arr引用的对象提供了另一个名称。因此,当您修改ob.prop时,您正在修改arr也引用的同一对象。

编辑:要复制数组,请查看this question

var arrCopy = arr.slice();

答案 1 :(得分:1)

正如Jorge所说,这种情况正在发生,因为obj.prop只是对arr的引用,因此arrobj.prop将指向内存中的相同位置。因此,如果你改变了,那么内存中的值(另一个指向的值)会发生变化,从而改变两者。

如果您希望避免这种情况,则需要执行深层复制。这会将数组的值复制到一个新数组中,obj.prop将指向该数组。

有关如何在javascript here中执行此操作的演练。