这个问题通常发生在你试图更新一个数组中的对象时。如果你不小心的话,它会替换而不是更新现有对象。这是因为JavaScript中的对象在赋值时是按引用传递的,而不是按值传递的。因此,当你尝试改变一个对象时,它实际上会覆盖对象的引用,而不是修改它所指向的内容。 以下是一个示例代码,演示了这个问题:
let arr = [{name:'tom', age:20},{name:'jerry', age:21}];
let obj = {name:'mike', age:19};
arr.push(obj); arr[0].name = 'john';
console.log(arr);
你可能希望将arr数组中第一项的name属性改为'john',但实际上你会得到以下输出:
[{name: 'john', age: 20}, {name: 'jerry', age: 21}, {name: 'mike', age: 19}]
相反,你应该使用Object.assign()或展开操作符…来复制对象并修改它:
let arr = [{name:'tom', age:20},{name:'jerry', age:21}];
let obj = {name:'mike', age:19};
arr.push(Object.assign({}, arr[0], {name: 'john'})); // 或者使用展开操作符 // arr.push({...arr[0], name: 'john'});
console.log(arr);
现在,你将得到以下输出:
[{name: 'john', age: 20}, {name: 'jerry', age: 21}, {name: 'mike', age: 19}]
上一篇:包含堆数据或静态变量的数据段
下一篇:包含对象和类型的响应