我想了解背后的为什么:
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)
答案 0 :(得分:6)
Array.map() 不会为其值未定义的索引调用回调。
来自MDN docs:
map为一个元素中的每个元素调用一次提供的回调函数 数组,按顺序,并从结果中构造一个新数组。打回来 仅对已分配值的数组的索引调用; 未对未定义的索引调用,具有 已删除或从未分配过值。