我遇到以下情況。我正在初始化一個數組,並將其分配給一個對象的屬性。數組賦值是否創建新的引用
var arr = [1,2,3,4,5];
var obj = { 'numbers': arr };
我明白,我通過我的數組arr
參考,我的對象obj
。對於意外的部分
{ numbers: [ 1, 2, 3, 4, 5, 6] }
現在:所以我能做到以下幾點:
arr.push(6);
console.log(obj);
將顯示以下,符合市場預期。 arr
的值通過外部事件進行更改,我希望obj.numbers
的值同時更改。但事實並非如此:
arr = [0,0,0,0,0];
console.log(arr);
console.log(obj);
arr --> [0,0,0,0,0]
obj --> { numbers: [ 1, 2, 3, 4, 5, 6] }
所以我arr
變量的值發生變化,但不是numbers
財產在我obj
變量。
所以,我唯一的解釋是,只要您對數組執行賦值,就會打破舊引用並創建新引用。是這樣嗎?
如何將我的新值[0,0,0,0,0]
分配給我的arr
變量和obj.numbers
(同時)?
通過'的obj = {編號:ARR}'你說 「我希望我的obj屬性'numbers'等於什麼有名爲'arr'現在」 恰好成爲陣列的參考。如果你想'obj.numbers'永遠是變量'arr'中的東西,你可以定義自定義getter'obj = {get numbers(){return arr}}'。現在你可以說'arr =「blah」'和'obj.numbers'將返回在訪問屬性的時候'arr'持有的任何東西。 –