可能重复:
为什么在JavaScript中使用for(var item in list)
循环处理数组被认为是不好的做法?
在JavaScript中,使用for..in
循环遍历数组是否是最佳实践?
var a = [1,2,3];
for(var x in a){
//dance
}
或者我应该使用完全编写的循环吗?
可能重复:
为什么在JavaScript中使用for(var item in list)
循环处理数组被认为是不好的做法?
在JavaScript中,使用for..in
循环遍历数组是否是最佳实践?
var a = [1,2,3];
for(var x in a){
//dance
}
或者我应该使用完全编写的循环吗?
for..in
会遍历整个Array对象的属性,包括原型模型中继承的属性。Enumerable
,这意味着它们不会在for..in
循环中显示。在这些浏览器中,您可以安全地在数组上使用for..in
。然而,旧版浏览器会表现出意外的行为。因此,仅仅因为您可以使用for..in
并不意味着您应该使用它。事实上,您不应该使用它。使用for(i=0,l=a.length; i<l; i++)
以获得最佳结果。在 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
}
}
最佳方式(优化)是执行
var len = a.length
for (var i = 0; i < len; i++){
}
(function() {
for (var i = 0, len = arr.length; i <= len; i++){
// your code here
};
})();
alert(i); // undefined
它提供了更好的封装性,并且没有办法在循环外使用索引变量。
var a = [1,2,3];
var b = [];
for(var x in a){
b.push(x);
}
alert(b);
在jsfiddle.net上运行此代码,以便自己获得答案。正如Kolink所提到的,这将为您提供数组的所有属性,而不仅仅是元素。
这绝对比在for循环中使用索引更好,因为它更像函数式编程,并允许迭代过程的内部优化。