为什么修改JavaScript对象数组元素属性时,所有属性值都重复?
问题原因
- 核心问题是你向
employee数组中插入的是同一个对象的引用,而非独立的对象实例。 - 你仅在循环外部声明了一次
name_age对象,循环执行的两次push操作,实际是把同一个内存地址的引用存入了数组,数组的两个元素指向的是完全相同的对象。 - 因此你修改
employees[0].name和employees[1].name本质都是修改同一个对象的属性,最后一次赋值为Hi,所以两个对象的最终name属性都是Hi。
修复方案
把name_age对象的声明放到循环内部,每次循环都生成新的独立对象实例即可:
// create the values of key "employees" var employee =[]; for(i=0;i<2;i++){ // 每次循环创建新的对象 var name_age={ "name":"Duke", "age":10 }; employee.push(name_age); } // create object str var str = { "company": "facebook", "CEO": "Mark Zuckerberg", "employees":employee }; str.employees[0].name="Hello"; str.employees[1].name="Hi"; console.log(str);
修改后数组内的两个对象为独立实例,修改属性互不干扰,输出符合预期。
内容的提问来源于stack exchange,提问作者Duke
相关产品推荐
相关产品推荐

