我想了解JavaScript数组的工作原理,但我这里有一个复杂的问题。
首先我创建了我的数组:
var arr = [];
并在其中设置一些元素:
arr[5] = "a thing";
arr[2] = undefined;
我认为我应该有一个大小为2的数组,因为我只有在2个特定索引处有两个对象。所以我使用了数组的.length
属性进行测试:
document.write(arr.length + "<br>");
有趣的是,这个结果是6。但它必须包含两个项目。它的大小如何是6?这可能与我使用的最新索引有关,在这里arr[5] = "a thing";
然后,我尝试遍历它:
var size = 0;
for(var x in arr){
size++;
}
size
变量现在是2。所以,我从中学到的是:如果我使用一个for in
循环,我将计算它有多少个属性,而不是它的最后一个索引。但是,如果我尝试document.write(arr[4])
(它还没有被设置),它会写undefined
。
那么为什么arr[2]
在for..in
循环中计数,而arr[4]
不计数呢?
让我回答我的问题:我正在考虑typeof undefined == undefined
这个惊人的真相。但这是JavaScript,我们需要按照它自己的规则来运作 :)
jsFiddle和下面的片段。
var arr = [];
arr[5] = "a thing";
arr[2] = undefined;
document.write(arr.length + "<br>");
var size = 0;
for(var x in arr){
size++;
}
document.write(size + "<br>");
document.write(arr[4] + "<br>");
document.write
*,它的作用并非你想象中的那样。例如,它不能“打印一些数据”。这是一个极低级的函数,而现代 JS 有很多更好的方法来做我们在1998年需要document.write
做的事情。 - Mike 'Pomax' Kamermans