(new Array(x)).map stranges

Vas*_*huk 7 javascript arrays

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

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

那没关系 - 好在文档中但是

(new Array(20)).map(function() { console.log(arguments); })
//[undefined × 20]
Run Code Online (Sandbox Code Playgroud)

它不使用回调(没有动作,debugger内部不起作用等).为什么??

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

Ric*_*ock 8

来自MDN:

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

使用声明数组时new Array(),所有元素都是未定义的,但它们尚未指定 undefined.因此,他们在通话中被跳过map().

您可以使用join()split()显式分配undefined给每个元素,然后您将获得预期的输出:

(new Array(20).join(undefined).split(undefined)).map(function() { console.log(arguments); })
Run Code Online (Sandbox Code Playgroud)