使用for时的不直观的javascript行为

时间:2012-07-19 19:01:03

标签: javascript arrays for-loop

  

可能重复:
  JavaScript “For …in” with Arrays

我使用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 ++)?

3 个答案:

答案 0 :(得分:1)

for..in遍历属性,而不是值。

如上面的链接所述,使用它代替带有数组的常规for的理论上的缺点是属性的迭代顺序是not defined in the ECMAScript spec(参见本节下的文本),并且是依赖于此实现。

答案 1 :(得分:0)

简单地:

您的第一个数组不是数组。 这是一个物体文字。

将其视为类的实例,其中所有属性和方法都是公共的。 你可以把它想象成一个单身人士,如果你真的真的想要,除非没有其他语言创造的任何全球范围的问题,试图制作单身人士。

因此在javascript中for (key in obj) {}意味着迭代类实例的属性。 使用for (i = 0, length = x; i < length; i += 1) {}迭代数组。

答案 2 :(得分:0)

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

相关问题