Firebug把(new Array(N))
表示为一个数组,其中有N
个undefined
。最近我遇到了这样的场景:一个大小已确定、元素全是undefined
的数组与新构造的、大小相等的数组不同,我希望能够理解它们之间的区别。
假设你想生成一个包含0到1000之间随机整数的列表。
function kilorange() {
return Math.floor(Math.random() * (1001));
}
no_random_numbers = (new Array(6)).map(kilorange);
my_random_numbers = [undefined, undefined, undefined,
undefined, undefined, undefined].map(kilorange);
我原本以为no_random_numbers
和my_random_numbers
是相同的,但它们不是。 no_random_numbers
是另一个由undefined
组成的数组,而my_random_numbers
是一个包含六个随机整数的数组。此外,在kilorange
中加入console.count
语句后,我发现使用Array构造函数创建的数组从未调用我的函数。这两个数组有何区别?为什么
map
(以及其他可迭代方法)不能将上述数组视为相同的呢?
new Array(N)
实际上是在做什么的规范。没有任何元素被设置,只有数组的length
被设置为N
。如果你从0
到N
迭代数组,你会得到N
个undefined
,尽管这些值没有被设置。 - Felix Klingnew Array(6).join("some text")
,它会将 "some text" 重复6次。 - Tetaxa