可能重复:
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
}
或者我应该使用完全编写的循环?
答案 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
}
}
答案 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中使用索引更好,因为它更像功能,并允许迭代过程的内部优化。