0

可能的重复:
带有数组的 JavaScript “For ...in”

我使用 for-in 迭代遍历了各种数组,结果各不相同:

var my_array1 = {"foo":2, "bar":3};
var my_array2 = new Array(
'foo',
'bar'
);
var my_array3 = ["foo","bar"];


for (var key in my_array1){
alert(key); // outputs key
}

for (var key in my_array2){
alert(key); // outputs index integer not value
}

for (var key in my_array3){
alert(key); // outputs index integer not value
}

非关联数组上的 for-in 迭代是否有理由只给出索引而不是像 python 中的实际值?

对于非关联数组,使用 for(var index in my_array) 是否比使用 for(var index=0; index<my_array.length; index++) 有优势?

4

3 回答 3

1

for..in迭代属性,而不是值。

如上面的链接所述,使用它而不是使用数组的常规for的一个理论上的缺点是, ECMAScript 规范中没有定义属性的迭代顺序(参见本节下的文本),并且依赖于这个实现。

于 2012-07-19T19:09:03.357 回答
0

简单地:

您的第一个数组不是数组。这是一个对象字面量。

将其视为一个类的实例,其中所有属性和方法都是公共的。如果您真的非常想要,您可以将其视为单例,除非没有其他语言创建的任何全局范围问题,尝试制作单例。

所以在 javascriptfor (key in obj) {}中意味着遍历类实例的属性。用于for (i = 0, length = x; i < length; i += 1) {}遍历数组。

于 2012-07-19T19:09:02.997 回答
0

我猜原因基本上可以归结为设计 Javascript 'in' 运算符的方式。这种行为类似于其他一些语言,在对象/哈希的情况下,键是“foo”和“bar”,而对于数组,键是索引。我看不出对数组使用“标准”循环和“for in”循环之间有很大区别,但为了清楚起见,我倾向于使用标准符号,除非我使用类似 . each() 函数会为我处理它。

于 2012-07-19T19:09:38.477 回答