javascript - Array.fill 重复相同的对象。为什么?

标签 javascript ecmascript-6

<分区>

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 事件中

ASP.NET 列表项 ID

javascript - 在javascript中比较数组与对象键和组

javascript - babel obj symbol.iterator 未定义

javascript - 为什么 bool 值的解构可以在 JavaScript 中工作?