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

时间:2015-07-31 04:06:11

标签: javascript arrays

我想了解背后的为什么

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

结果

a:[ , , ]

b:[ , , ]

当我希望b导致['b', 'b', 'b']时。

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

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

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

1 个答案:

答案 0 :(得分:6)

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

来自MDN docs:

  

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