在Javascript中循环数组

4

1
相关链接:https://dev59.com/C0nSa4cB1Zd3GeqPSvy_ - josh.trow
这个问题已经被问过很多次了。 - Rob W
这里的第一个链接非常有用。 - Tegra Detra
6个回答

3
使用for..in会遍历整个Array对象的属性,包括原型模型中继承的属性。
更近期的浏览器可以将属性设置为非Enumerable,这意味着它们不会在for..in循环中显示。在这些浏览器中,您可以安全地在数组上使用for..in。然而,旧版浏览器会表现出意外的行为。因此,仅仅因为您可以使用for..in并不意味着您应该使用它。事实上,您不应该使用它。使用for(i=0,l=a.length; i<l; i++)以获得最佳结果。

谢谢。这正是我所需要的。 - Tegra Detra

2

在 JavaScript 中,使用 for in 循环遍历数组被认为是最佳实践吗?

不是的。对于数组,推荐的方式是使用普通的循环而不是带有 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
  }
}

更多信息请查阅MDN文档。


2

最佳方式(优化)是执行

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

}

2
你可以使用匿名函数来锁定循环内的数组索引。
(function() {
for (var i = 0, len = arr.length; i <= len; i++){
  // your code here
};
})();

alert(i); // undefined

它提供了更好的封装性,并且没有办法在循环外使用索引变量。


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

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


-2

这绝对比在for循环中使用索引更好,因为它更像函数式编程,并允许迭代过程的内部优化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接