Javascript 对象中的循环与数组中的循环
可能重复:Javascript 对象中的循环与数组中的循环,javascript,Javascript,可能重复: 数组中的for循环应该像(var i=0;i
数组中的for循环应该像(var i=0;i
for…in
只迭代定义的成员
所以
将只显示定义的一个值。有时这是一件好事——通常不是
另外,for…in
在属性上循环,而不是在数组索引上循环(在javascript中,数组只是一个常规对象,其属性的名称是您分配给数组的值)
所以当你使用..时,你会得到奇怪的结果,比如:
一,
二,
三,
长度
托斯特林
等等
对于数组来说,使用典型的
for
语法是更好的选择。对于对象来说,中的for…更有意义,因为未定义的问题不会经常出现。无论如何,我都喜欢使用for(var x;x
语法。不过,在js中感觉更好。您应该使用for(i=0;实际上这不是一个很好的复制品,所以我会在另外80亿个复制品中寻找一个……半生不熟的小例子:这个问题本身并没有太多的重叠,但不可估量的T.J.Crowder的答案涵盖了所有的基础。@MaVRoSCy我不知道我是否误解了这一点,但说(或暗示)数组是对象的一种类型…@Kpower yes数组是对象,但它们是特殊的。而不是“过去”,for..in循环迭代对象的所有可枚举属性,包括其[[Prototype]]
chain。数组的数字索引只是数组方法处理不同的数字对象属性。这不是奇怪的行为,这是意料之中的。@审美和被期待意味着它不可能也很奇怪?@RobG,是的,我知道。可能不是我最好的措辞,但信不信由你,我的想法是对的
var arr = [];
arr[10] = "hi";
for(var x in arr)
{
alert(x);
}
arr = [1,2,3,4]; // arr[0] == 1; arr[1] == 2;
for(var i=0; i<arr.length; i++) { alert(arr[i]; } // 1, 2, 3, 4
obj = {
foo: 1,
bar: 2
}
for(key in obj) {
if(obj.hasOwnProperty(key)) {
alert(key); // foo, bar
alert(obj[key]); // 1, 2
}
}