Javascript 为什么可以';t图';未定义';排列

Javascript 为什么可以';t图';未定义';排列,javascript,Javascript,正如标题所说,为什么我不能映射一个包含未定义项的数组 var foo = new Array(3); // [ , , ] var bar = [null, null, null]; // [null, null, null] foo.map(function(val){return 'test'}); // [ , , ] bar.map(function(val){return 'test'}); // ['test', 'test', 'test'] 也许这是个愚蠢的问题,但我真的想知

正如标题所说,为什么我不能映射一个包含
未定义项的数组

var foo = new Array(3);
// [ , , ]
var bar = [null, null, null];
// [null, null, null]

foo.map(function(val){return 'test'});
// [ , , ]
bar.map(function(val){return 'test'});
// ['test', 'test', 'test']
也许这是个愚蠢的问题,但我真的想知道原因

谢谢。

来自:

map为数组中的每个元素按顺序调用一次提供的回调函数,并根据结果构造一个新数组回调仅对具有赋值(包括未定义)的数组索引调用。对于数组中缺少的元素(即从未设置、已删除或从未赋值的索引),不会调用它。

请参见:

回调
仅对具有赋值的数组索引调用,包括
未定义的
。对于数组中缺少的元素(即从未设置、已删除或从未赋值的索引),不会调用它

它不起作用,因为元素没有被赋值

如果你使用

foo[0] = undefined;
foo[1] = undefined;
foo[2] = undefined;

然后它就可以工作了。

“因为规范这么说”“它不会为数组中缺少的元素(即从未设置、已删除或从未赋值的索引)调用。”-