Javascript 数组映射跳过元素

Javascript 数组映射跳过元素,javascript,Javascript,我正在尝试生成一个数组。下面是我遇到问题的一个简化片段: //should return an array with 10 elements with values of 0 var arr = Array(10).map(function() {return 0;}); console.log(arr.length); //returns 10 console.log(arr); //empty array 我知道使用Array(length)返回一个数组,其中length元素被设置为un

我正在尝试生成一个数组。下面是我遇到问题的一个简化片段:

//should return an array with 10 elements with values of 0
var arr = Array(10).map(function() {return 0;});

console.log(arr.length); //returns 10
console.log(arr); //empty array
我知道使用
Array(length)
返回一个数组,其中
length
元素被设置为
undefined
。我怀疑
.map()
跳过了
未定义的
元素,但我不是100%确定

我能做些什么来获得预期的结果?我知道我可以用循环完成同样的事情,但如果可能的话,我真的很想使用
.map()

--更新--

有人能解释为什么会这样吗

var arr = Array(10).join().split(',').map(function() {return 0;});

-编辑-忽略更新。我找到了它的工作原理。

数组。apply
可能会接受一个具有属性长度的对象,并基于该属性,将
未定义的
长度推到其中

例如:

Array.apply(null, {length: 10});
这也解释了为什么您也可以使用的建议:

Array.apply(null, Array(10));

因为
数组(10)
将按预期创建值为10的属性长度。

该数组中没有成员。迭代器方法在每次迭代中执行
if(在本例中为i)
检查,以确保成员作为自己的或继承的属性实际存在。您可以执行
Array.apply(null,Array(10))
强制创建成员。
.apply()
方法不关心给定的集合是否有实际成员。@cookiemonster您应该将其添加为答案:)。我保留了一个答案,但收到了2张反对票,所以我会让其他人来处理。(我还在注释中添加了相同的
.apply()
解决方案,因为该问题只是关于“为什么”部分。)仅供参考,ECMAScript 6将有一个
数组.prototype.fill()
方法,因此您可以执行
数组(5).fill(0)
处理零初始化数组。它现在在FireFox中工作。谢谢你的解释