我发现了奇怪的行为(在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?
来自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)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |