映射 new Array() 而不填充它会返回一个空数组。为什么?

6 javascript arrays ecmascript-6

给我猜这个谜语。

假设您新建了一个包含 1,000 个元素的数组,并希望使用 指定每个元素的索引作为元素的值.map()。我希望它像这样工作:

new Array(1000).map((element, i) => i);
Run Code Online (Sandbox Code Playgroud)

问题是:尽管将 的返回值指定.map()为数组索引,但返回的新数组虽然具有所需的 1,000 个元素,但却是空的。这可以通过像这样的链接来解决.fill(0)

new Array(1000).fill(0).map((element, i) => i);
Run Code Online (Sandbox Code Playgroud)

但为什么?

为什么需要.map.filter需要填充数组来生成填充数组?

lil*_*zek 2

这主要是因为即使使用未定义的指针,也必须填充数组才能进行迭代。有了new Array()它就不是了。

来自MDC(重点是我的):“map 按顺序为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新数组。仅对已分配值的数组索引调用回调;它不会为已删除或从未赋值的索引调用。”

根据该线程已接受答案的第一条评论:

JavaScript“new Array(n)”和“Array.prototype.map”怪异