(new Array(x))。map stranges

时间:2016-01-21 19:00:07

标签: javascript arrays

我发现了奇怪的行为(在Chrome上测试过)

[1,2].map(function() { console.log(arguments); })
// [1, 0, Array[2]]
// [2, 1, Array[2]]
// [undefined, undefined]

这没关系 - 好在文档中 但

(new Array(20)).map(function() { console.log(arguments); })
//[undefined × 20]

它不使用回调(没有动作,里面的debugger不起作用等)。为什么?

语法new Array(arrayLength)应该创建给定长度的数组。确实如此。但是.map是什么?

1 个答案:

答案 0 :(得分:8)

来自MDN

  

仅对已分配的数组的索引调用回调   值,包括undefined。它没有被称为缺少元素   数组(即从未设置过的索引,已经是   已删除或从未分配过值。)

使用new Array()声明数组时,所有元素都是未定义的,但它们未被指定 undefined作为 。因此,在map()的调用中会跳过它们。

您可以使用join()split()向每个元素明确指定undefined,然后您将获得预期的输出:



(new Array(20).join(undefined).split(undefined)).map(function() { console.log(arguments); })