檢查驗證碼:爲什麼更改已經推送到數組的對象也會更改數組中的值?
var bbb = [];
var aaa = {};
aaa.test = "1";
bbb.push(aaa);
console.log(bbb[0].test);
aaa.test = "2";
bbb.push(aaa);
console.log(bbb[0].test);
爲什麼將控制檯輸出爲 「1,2」?我認爲它應該是「1,1」。
檢查驗證碼:爲什麼更改已經推送到數組的對象也會更改數組中的值?
var bbb = [];
var aaa = {};
aaa.test = "1";
bbb.push(aaa);
console.log(bbb[0].test);
aaa.test = "2";
bbb.push(aaa);
console.log(bbb[0].test);
爲什麼將控制檯輸出爲 「1,2」?我認爲它應該是「1,1」。
通過引用將對象添加到數組中。因此,當您執行bbb[0]
時,它指的是您先前創建並修改的aaa
的實例。
如果您不想要這種行爲,則需要在添加對象之前克隆該對象。
bbb.push(clone(aaa))
至於clone()
實施,如果您有jQuery的:
function clone(obj) {
return jQuery.extend({}, obj);
}
而且沒有jQuery的:
function clone(obj) {
return JSON.parse(JSON.stringify(obj));
}
你將一個aaa
的引用傳遞給數組。所以當你改變aaa
時,它會反映在數組的第一個元素中。
我怎樣才能使控制檯輸出爲「1,1」? – user1371699 2013-05-05 20:47:44
看到編輯原來的答案 – xbonez 2013-05-05 20:48:23
非常感謝!!!!! – user1371699 2013-05-05 20:53:30