JavaScript:在数组上循环
得出在JavaScript数组上循环的最快方法是使用for-in循环的结论是错误的吗?例如:JavaScript:在数组上循环,javascript,loops,for-loop,Javascript,Loops,For Loop,得出在JavaScript数组上循环的最快方法是使用for-in循环的结论是错误的吗?例如: for (var index in items) { ... } 请参见中的,语句不应用于对数组或类似数组的元素进行迭代 此语句的目的是枚举对象属性 它不应用于类似数组的对象,因为: 不保证迭代顺序,数组索引可能不会以数字顺序访问 继承的属性也被枚举 要在数组上迭代,建议始终使用顺序循环 推荐条款: Edit:噢,我忘了提到这是完全有偏见的,因为表达式新数组(10000)只是用100
for (var index in items) {
...
}
请参见中的
,语句不应用于对数组或类似数组的元素进行迭代
此语句的目的是枚举对象属性
它不应用于类似数组的对象,因为:
- 不保证迭代顺序,数组索引可能不会以数字顺序访问
- 继承的属性也被枚举
要在数组上迭代,建议始终使用顺序循环
推荐条款:
Edit:噢,我忘了提到这是完全有偏见的,因为表达式新数组(10000)
只是用10000
作为length
属性的值初始化数组对象,数字索引属性甚至不存在,这就是为什么它看起来是最快的,例如:
var a = new Array(10);
a.length; // 10
a.hasOwnProperty('0'); // false, the indexes don't even exist!
a.hasOwnProperty('1'); // false
//...
试试看,如果一个数组对象真的包含10000个元素,你会感到惊讶 是的,它可以是最快的,但是它不安全,而且对于in
循环来说也不是一个,所以它确实是一个没有意义的点
在正确之前,速度不是问题:)
例如,在IE中测试:您会注意到顺序不正确。它是否最快取决于实现。考虑到每个主要浏览器供应商都有自己的实现,再加上一个移动实现,再加上所有仍在使用的旧浏览器和beta浏览器演示下一代JavaScript引擎……目前“只有”大约30种不同的javascript实现。即使这是目前所有或大多数应用程序中速度最快的,javascript引擎仍在快速发展
这甚至假设javascript是您的瓶颈。这里有一个技巧——尽管javascript速度很慢,但它很少成为页面呈现的瓶颈。互联网传输速度和服务器响应时间往往是更重要的因素
也许最好先编写正确的代码。这有点过时(只包括FF3.0和IE8b),但它相当全面
相反,条件简化的循环看起来最快:
var-len;而(len--){}
迭代的顺序并不重要,因为“index”将始终是枚举元素的数字索引。@snickerseremyfave-不,它不是。在IE中测试这个问题:+1你计算你回答这个问题的次数吗?:)@SnickersremyFave:忘了提及你的测试,编辑。@galambalazs:谢谢:),是的,很多次了,我会继续这样做,这是一个非常常见的反模式:(你为什么说它是最快的?对于一个10000个项目的数组,它可能会更快,但对于更多的现实场景,我不太确定:@Philippe-对不起,我是说关于他的具体测试,我更新了以澄清这一点,我的意图更多的是传达你不应该首先使用它,所以无论性能如何,如果它不正确也没关系。)首先,我不是。