0
這裏是我的代碼:爲什麼當我在數組中推入另一個值時,JavaScript對象值發生了變化?
var arr = [];
var obj = {};
(function() {
for(let i = 1; i <= 10; i++) {
arr.push(i);
obj[i] = arr;
}
})();
此代碼給了我這樣的輸出:
{
'1': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'2': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'3': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'4': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'5': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'6': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'7': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'8': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'9': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
'10': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
}
爲什麼不給這樣的輸出?
{
'1': [ 1 ],
'2': [ 1, 2 ],
'3': [ 1, 2, 3 ],
'4': [ 1, 2, 3, 4 ],
'5': [ 1, 2, 3, 4, 5 ],
'6': [ 1, 2, 3, 4, 5, 6 ],
'7': [ 1, 2, 3, 4, 5, 6, 7 ],
'8': [ 1, 2, 3, 4, 5, 6, 7, 8 ],
'9': [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
'10': [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
}
這是因爲在所有的JavaScript程序對象是引用類型。 「arr」是對數組的引用,並且在您的循環中,爲您的對象「obj」的每個新創建的成員分配了相同的引用。所以事實上,只有一個存儲位置(區域)存儲陣列(1-10)的元素,「obj」(包括「arr」)的所有成員指向同一個存儲位置。 –