在JavaScript中,對象作爲指向對象內部值的指針存儲在內存中。這是多麼原始數據類型(int
,char
等)
一個很好的方式展現這是嘗試打印出對象的不同,VS打印出的int
:
HTML:
<div id="anelementhere"></div>
<div id="anotherelementhere"></div>
JS:
var x = 5;
var obj = {x:30,y:20};
document.getElementById("anelementhere").innerHTML = x;
document.getElementById("anotherelementhere").innerHTML = obj;
的jsfiddle:https://jsfiddle.net/d3ohpqqp/
你應該能看到一個類似於:
5
[object Object]
現在,知道這一點,什麼是存儲在陣列中沒有{{x:30, y:20}, {x:30, y:20}, {x:30, y:20}}
,但{[object Object], [object Object], [object Object]}
,這都指向ONE{x:30, y:20}
這是什麼使一個改變之後的所有y
性質發生變化。現在,一個簡單的解決方案,正如@IrkenVader所示,是將對象放入數組時初始化的對象。
但是,如果由於某種原因,你還是要在陣列外的原始對象,這是另一種解決方案:
var obj = {x:30,y:20};
var arr = [];
for(var i = 0;i<3;i++) {
arr.push({x:obj.x, y:obj.y});
}
arr[0].y = 40;
document.write(arr[0].y + " " + arr[1].y);
的jsfiddle:https://jsfiddle.net/9gzyr38x/
陣列中的每個索引包含*參考*到相同的對象 - 所以更改一個索引中的值將對所有對象生效。 – tymeJV