为什么我不能将新的Array(3)映射到新值的数组中?

Att*_*cus 2 javascript arrays

我想了解这背后的原因:

var a = new Array(3);
var b = a.map(function () {
  return 'b';
});
Run Code Online (Sandbox Code Playgroud)

结果是

A: [ , , ]

b: [ , , ]

当我期望b导致['b', 'b', 'b'].


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

并且在地图功能之后,b将成为[, , , 'b'].

这里发生了什么?为什么这些分配的单元格的行为与初始化不同?我最初期望这样做,如果它是一个数组文字,[undefined, undefined, undefined].map(fn)

tec*_*bar 6

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

来自MDN文档:

map按顺序为数组中的每个元素调用一次提供的回调函数,并从结果中构造一个新数组.仅为已分配值的数组的索引调用回调; 对于未定义的索引,已删除的索引或从未分配过值的索引,不会调用它.