我发现奇怪的行为(在 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
里面不起作用等)。为什么??
Syntax new Array(arrayLength)
应该创建给定长度的数组。确实如此。但与什么.map
?
From MDN:
仅对已分配的数组的索引调用回调
值,包括未定义的值。不要求缺少元素
数组(即从未设置过的索引,已被设置过的索引)
已删除或从未分配过值)。
当您使用声明数组时new Array()
,所有元素均未定义,但尚未定义assigned undefined
as a value。因此,它们在调用中被跳过map()
.
您可以使用join()
and split()
显式分配undefined
每个元素,然后您将获得预期的输出:
(new Array(20).join(undefined).split(undefined)).map(function() { console.log(arguments); })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)