为什么我不能将new Array(3)映射到一个包含新值的数组?

Why can't I map new Array(3) into an array of new values?

本文关键字:一个 包含新 数组 映射 不能 new Array 为什么      更新时间:2023-09-26

我想了解一下为什么背后的原因:

var a = new Array(3);
var b = a.map(function () {
  return 'b';
});

搜索结果

a: [ , , ]

b: [ , , ]

当我期望b产生['b', 'b', 'b']


在进一步的调查中,我发现如果我要做a.push('a'),我将有[, , , 'a']

经过map函数后,b变成了[, , , 'b']

这是怎么回事?为什么这些分配单元的行为不同于初始化?我最初期望它的行为,如果它是一个数组文字,[undefined, undefined, undefined].map(fn)

Array.map()不为未定义值的索引调用回调。

From MDN docs:

map为对象中的每个元素调用一次所提供的回调函数数组,并根据结果构造一个新数组。回调仅对已赋值的数组索引调用;对于未定义的索引不调用已被删除或从未被赋值。