mat*_*teo 1 javascript arrays foreach loops object
我有一个关于 js 循环及其实际工作原理的问题。我正在循环访问如下所示的对象数组:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
Run Code Online (Sandbox Code Playgroud)
循环只是更新每个元素的值:
array.forEach(el => {
el.value = 1;
console.log(array)
})
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么输出看起来像这样:
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
Run Code Online (Sandbox Code Playgroud)
而不是这样的:
[{value: 1}, {value: 0}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
我猜您正在尝试查看 Chrome 上开发工具的输出,并且在开发工具上,您会看到对数组的引用。这意味着在执行结束时,所有项目的值都为 1,因此开发工具会显示对数组的相同引用。
要查看执行时的实际值(而不是参考值),请使用JSON.stringify以下命令:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
array.forEach(el => {
el.value = 1;
console.log(JSON.stringify(array))
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |