我发现了奇怪的行为(在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
是什么?
答案 0 :(得分:8)
来自MDN:
仅对已分配的数组的索引调用回调 值,包括undefined。它没有被称为缺少元素 数组(即从未设置过的索引,已经是 已删除或从未分配过值。)
使用new Array()
声明数组时,所有元素都是未定义的,但它们未被指定 undefined
作为值 。因此,在map()
的调用中会跳过它们。
您可以使用join()
和split()
向每个元素明确指定undefined
,然后您将获得预期的输出:
(new Array(20).join(undefined).split(undefined)).map(function() { console.log(arguments); })