現象:循環中創建對象並推入數組,結果數組所有元素指向同一個對象(最後一次賦值的值)。
var datas = [];
var data = {}; // 錯誤:循環外創建,所有迭代共用同一對象
$(".baby-panel").each(function() {
data.id = $(this).find(".babyid").attr("baby_id");
data.name = $(this).find(".babyname input").val().trim();
datas.push(data); // 推入的是同一引用
});
var datas = [];
$(".baby-panel").each(function() {
var data = {}; // 正確:每次迭代創建新對象
data.id = $(this).find(".babyid").attr("baby_id");
data.name = $(this).find(".babyname input").val().trim();
datas.push(data);
});
var data = {} 僅創建**一個**對象,循環內反覆修改其屬性,push 的是同一地址。push 的是不同地址,數組元素相互獨立。// 若需基於模板對象複製
var template = {default: true};
datas.push(Object.assign({}, template, {id: 1, name: 'A'}));
// 或 ES6
datas.push({...template, id: 1, name: 'A'});
牢記:引用類型賦值傳遞的是地址,循環中需主動創建新實例。