You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:06:04