2013-03-13 58 views
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数组正在改变?节点/ Javascript设置对象属性到数组不工作?

我错过了什么?

+0

您已经分配了对同一个数组的引用。 – 2013-03-13 23:15:23

回答

1

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

编辑:复印阵列看看this question

var arrCopy = arr.slice(); 
+0

那么我会如何去创建一个arr的副本而不是引用它? – user2123244 2013-03-13 23:32:18

+0

@ user2123244看到我的编辑 – 2013-03-13 23:33:43

1

正如豪尔赫提到的,发生这种情况是因为obj.prop仅仅是arr的引用,所以arrobj.prop将指向相同放在记忆中。所以如果你改变了,那么内存中的值(另一个指向的值)就会改变,从而改变两者。

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

有一个如何在javascript here中执行此操作的步骤。

+0

非常感谢您的链接和解决我的新手问题:) – user2123244 2013-03-14 01:02:47