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設置對象屬性到數組不工作?
我錯過了什麼?
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設置對象屬性到數組不工作?
我錯過了什麼?
由於系統指出,ob.prop = arr
基本上只是提供另一個名稱訪問arr
引用的對象。因此,當您修改ob.prop
時,您正在修改arr
也提到的相同對象。
編輯:複印陣列看看this question:
var arrCopy = arr.slice();
那麼我會如何去創建一個arr的副本而不是引用它? – user2123244 2013-03-13 23:32:18
@ user2123244看到我的編輯 – 2013-03-13 23:33:43
正如豪爾赫提到的,發生這種情況是因爲obj.prop
僅僅是arr
的引用,所以arr
和obj.prop
將指向相同放在記憶中。所以如果你改變了,那麼內存中的值(另一個指向的值)就會改變,從而改變兩者。
如果你想避免這種情況,你需要做一個深拷貝。這會將數組的值複製到一個新的數組中,obj.prop
將指向該數組。
有一個如何在javascript here中執行此操作的步驟。
非常感謝您的鏈接和解決我的新手問題:) – user2123244 2013-03-14 01:02:47
您已經分配了對同一個數組的引用。 – 2013-03-13 23:15:23