如果在迭代javascript循环时使用“in”和“=”运算符有什么区别?

时间:2011-12-16 00:33:32

标签: javascript loops for-loop

如果我使用以下其中一项来迭代javascript数组有什么区别:

for (var i = 0 ; i <abc.length :i++)  

for (var i in abc.lengh)

谢谢。

2 个答案:

答案 0 :(得分:2)

要迭代数组的元素,您应该使用以下形式:

var x = [1,2,3,4];

for (var i = 0, len = x.length; i < len; i++) {
    // code here to access x[i]
}

对于迭代对象的属性,您应该使用:

var house = {size: 3200, bedrooms: 5, garage: 2, color: "white", city: "San Francisco"};

for (var key in house) {
    // access each property here as house[key]
}

虽然你有时可以在数组上使用第二种语法,但是你会遇到麻烦,因为它会包含已经添加到数组中的自定义属性,这些属性本身不是数组元素,并且可能真的会混淆代码和导致微妙或不那么微妙的错误。

在第一种语法中添加len变量是速度优化,因为将长度1提取到局部变量可能比在循环的每次迭代中访问length属性要快得多。不要求这样做。它也可以这样做:

for (var i = 0; i < x.length; i++)

答案 1 :(得分:1)

第一个例子('for'循环)将迭代数组的元素,并且是循环数组的首选方法。

后一种方法('for ... in'循环)将遍历对象的所有属性,对于比数组更复杂的对象通常更有用。如果你已经为数组对象添加了任何自定义属性,那么for ... in循环也将遍历它们,这并不总是需要。

要记住......循环中还有一件事 - 它们可能(取决于浏览器)不按您期望的顺序遍历对象。有关详情,请参阅另一个问题的答案:https://stackoverflow.com/a/280861/726326