2013-03-13 57 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