对象中的循环与数组中的循环

for loops in objects vs in arrays

本文关键字:循环 数组 对象      更新时间:2023-09-26

可能的重复项:
JavaScript for ...in vs for
之间的区别..in 和 for 循环,以及计数器声明

是否有任何特殊原因,数组中的循环应该像for (var i = 0; i < foo.length; i++) {一样编码,而对象中的循环只是for (var i in foo) { 是因为对象的设置方式与数组的设置方式吗?(我知道数组是一种对象)或者只是另一种吹毛求疵的编程约定。

迭代

列表时应使用for(i=0; i<n; i++)循环,因为它们可按整数索引

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
迭代

对象时,应使用 for...in 循环,因为它可按键编制索引。如果您将对象视为键:值映射。请记住检查对象是否具有与每个键匹配的自己的属性,因为 in 语句将检查对象的 proptotype 链并返回从上面继承的属性名称。

obj = { 
  foo: 1,
  bar: 2
}
for(key in obj) {
  if(obj.hasOwnProperty(key)) {
    alert(key);       // foo, bar
    alert(obj[key]);  // 1, 2
  }
}

嗯,主要原因是for...in只迭代定义的成员。

所以

var arr = [];
arr[10] = "hi";
for(var x in arr)
{
    alert(x);
}

将仅显示定义的一个值。有时这是一件好事 - 通常不是。

此外,for...in循环属性,而不是数组索引(在javascript中,数组只是一个常规对象,其属性的名称是您分配给数组的值)

所以当你使用..在你可以得到奇怪的结果,比如:

1

阿拉伯数字

3

长度

到字符串

等。

对于数组来说,使用典型的for语法是更好的选择。对于对象,for...in更有意义,因为未定义的问题不会经常出现。不过,无论哪种方式,我都喜欢使用for(var x; x < y; x++)语法。在 js 中感觉更好。