为什么不能映射'undefined'数组

时间:2016-02-15 10:33:55

标签: javascript

正如标题所说,为什么我不能映射包含undefined项的数组?

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']

也许是愚蠢的问题,但我真的想知道原因。

感谢。

2 个答案:

答案 0 :(得分:1)

来自MDN

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

答案 1 :(得分:1)

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Description

  仅对已分配值的数组的索引调用

callback,包括undefined。它不会被调用缺少数组的元素(即,从未设置过的索引,已删除的索引或从未赋值的索引)。

它不起作用,因为元素尚未赋值。

如果您使用

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

然后它会起作用。