我使用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 ++)?
答案 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()函数可以为我处理它。