所以。我希望以下代码返回 [1,1,1,1...]。
(new Array(10)).map(function() { return 1;})
但它返回 [, , , , , ...]。
对,因为创建了一个没有a为 10 的元素new Array(10)
的数组,并且只迭代实际存在的元素。(是的,这令人惊讶。:-))length
map
此外,(new Array(10)).length == 10
并且(new Array(10))[0] == undefined
是true
。
再次正确,因为(再次)new Array(10)
不会将任何元素放入数组中,因此访问[0]
会为您提供undefined
.
JavaScript 的标准数组根本不是真正的数组,它们可以有length
一个正数,而其中没有任何条目。它们是“稀疏”数组的一种形式。
让我们举一个更简单的例子:
var a = new Array(10);
a[2] = 1;
该数组包含一个元素,即 index 处的元素2
。index0
没有元素, index1
没有元素, index 及以上没有元素3
。它只是有差距。你可以通过询问来判断:
console.log(0 in a); // "false"
console.log(1 in a); // "false"
console.log(2 in a); // "true"
JavaScript 中的标准数组只是具有特殊行为的对象,分配length
给Array.prototype
.
这与较新的“类型化”数组形成鲜明对比Int32Array
,它们是传统意义上的真正数组。