在Javascript中循环数组

时间:2012-02-10 17:07:22

标签: javascript arrays

  

可能重复:
  Why is 'for(var item in list)' with arrays considered bad practice in JavaScript?

使用for..in循环遍历JavaScript数组是最佳做法吗?

var a = [1,2,3];
for(var x in a){
//dance
}

或者我应该使用完全编写的循环?

6 个答案:

答案 0 :(得分:2)

  

在JavaScript中循环遍历数组是否被视为最佳实践?   使用for for循环?

没有。对于数组,推荐的方法是使用不带in关键字的普通循环。

for (var i = 0, len = arr.length; i <= len; i++){
  // your code here
}

另一方面,for-in构造对于横向javascript 对象非常有用:

for (var i in someObj){
  if (someObj.hasOwnProperty(i)){
     // code here
  }
}

More info on MDN docs.

答案 1 :(得分:2)

最佳方式(优化)是

var len = a.length
for (var i = 0; i < len; i++){

}

答案 2 :(得分:2)

通过使用for..in,您循环遍历所有数组对象的属性,包括通过原型模型继承的属性。

更新的浏览器有一种方法可以使属性非Enumerable,这意味着它们不会出现在for..in循环中。在这些浏览器中,您可以安全地在阵列上使用for..in。但是,旧版浏览器会以意想不到的方式运行。因为你可以使用for..in并不意味着你应该这样做。事实上,你不应该。使用for(i=0,l=a.length; i<l; i++)可获得最佳效果。

答案 3 :(得分:2)

您可以使用匿名函数将数组索引器锁定在循环内。

(function() {
for (var i = 0, len = arr.length; i <= len; i++){
  // your code here
};
})();

alert(i); // undefined

它为您提供了更好的封装,无法使用循环中的索引器变量

答案 4 :(得分:0)

var a = [1,2,3];
var b = [];
for(var x in a){
  b.push(x);
}
alert(b);

在jsfiddle.net中运行此代码以获得自己的答案。正如Kolink所说,这为数组提供了所有属性,而不仅仅是元素。

答案 5 :(得分:-2)

这肯定比在fors中使用索引更好,因为它更像功能,并允许迭代过程的内部优化。