如果我使用以下其中一项来迭代javascript数组有什么区别:
for (var i = 0 ; i <abc.length :i++)
或
for (var i in abc.lengh)
谢谢。
答案 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