<分区>
var arr = new Array(4).fill({});
arr[2].status = true;
console.log(arr[0].status);
为什么数组填充在所有索引中填充相同的对象?
<分区>
var arr = new Array(4).fill({});
arr[2].status = true;
console.log(arr[0].status);
为什么数组填充在所有索引中填充相同的对象?
最佳答案
.fill
将在数组的每个段上插入完全相同的对象(相同的实例)。
这就是为什么执行 .fill(Math.random)
将返回一个始终填充相同数字的数组。
您可以这样做以获得您想要的:
new Array(4).fill().map(() => ({}));
为了解释问题代码的幕后情况,我们将其转换为 ES5 代码:
var arr = new Array(4); // new Array(4)
var obj = new Object(); // *1: with this object instance
for(i = 0; i < 4; i++) { // .fill( *1 )
arr[i] = obj;
}
如您所见,我们将相同的对象实例 (obj
) 分配给数组实例的每个单元格。
这和为什么的原理是一样的:
const obj = {};
const a = obj;
const b = obj;
a.foo = true;
使 a.foo === b.foo
解析为 true
。
关于javascript - Array.fill 重复相同的对象。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43294552/
相关文章:
javascript - 端点位置未在 jsPlumb 调整大小中更新
javascript - 从客户端设置和清除 Node 服务器上的超时
javascript - Jasmine:模拟单例的内部方法
javascript - 将 javascript Winston 工厂类转换为 ES6
Javascript ES6 从 URL 获取 JSON(无 jQuery)
c# - 将 GET 变量挂接到 onload JavaScript 事件中
javascript - 在javascript中比较数组与对象键和组