2011-10-05 12 views
1

我感到困惑,當我重新考慮這兩個函數:javascript中Object Array的值是如何操作的?

第一個是這樣的:

var test = [1,2,3];
var ele = test[0];
ele= 2;
alert(test[0]);

結果是1.我認爲這是顯而易見的。但是,當我遇到這樣的:

var test = [{id:1},{},{}];
var ele = test[0];
ele.id = 2;
alert(test[0].id);

結果變成爲2
所以任何人都可以告訴我怎麼當它發生的JavaScript工作像這個在對象數組中?

回答

2

在JavaScript中,對象是按引用分配的,而不是在內存中複製。因此,如果您將現有對象分配給其他變量,則兩者都將指向內存中的同一對象。因此對兩者的修改都將反映在兩者中。

var a = {id: 1, name: "bob"}; 
var b = a; 
console.log(b.name); // bob 
b.name = "bill"; 
console.log(a.name); // bill 
在你的榜樣

因此,執行ele.id = 2;運行在存儲位置保持物體在test[0]。該對象的id屬性的變化體現在兩個變量引用它(test[0], ele

請注意,如果您指派了整個數組testele,修改陣列成員之一將被反映在test, ele自數組是Javascript中的對象:

var test = [1,2,3]; 
// Assign array test to ele 
var ele = test; 
// Modify one member 
ele[0] = 2; 
alert(test[0]); // 2