我最近有机会在javascript中进行循环,我对使用for循环还是while语句感到很困惑。
var i = foo.length;
while(i--){
}
或
for(var i=0 ;i<=foo.length;i++){
}
我想从javascript人那里知道哪一个更有效,在什么情况下我们应该相应地使用它们。这与java中的原因相同或不同。
答案 0 :(得分:9)
理论上while
循环更快,因为for
循环每次循环都会查找length
的{{1}}属性,但在现实世界中使用它将产生无法估量的微小差异。
答案 1 :(得分:7)
在某些浏览器中,某些循环方式更快 - 例如,在Chrome中,for
循环速度是其两倍,但并非所有浏览器都能获得一致的胜利者。如果你发现一个技巧可以在一个浏览器中快速实现它,你将在另一个浏览器中受到惩罚。
不同浏览器的实际性能测试:http://jsperf.com/for-or-while
您应该使用对情况有意义的循环类型。在许多情况下,你在循环中所做的事情比循环本身需要更长的时间。
答案 2 :(得分:4)
For循环是while循环的语法糖。它们应该完全一样。
然而,你的两个循环在语义上是不同的。一个计数为零,而另一个计入一个对象的属性,这必然会更慢,尽管只是略微如此。将上述while循环与以下for循环进行比较会更有意义:
for (var i = foo.length; i--;) { }
答案 3 :(得分:4)
实际上,您使用的循环没有显着差异。我读过的每本书都这么说。您的示例可能存在差异,因为您在while循环中使用递减循环。它往往更快,因为只评估了一个条件。
例如while(i<100)
比while(i--)
对于你的for循环,你可以在循环之前存储长度并处理该值而不是每次都检索它。它还会为您提供一些性能优化。
var fooLength = foo.length;
for(var i=0 ;i<= fooLength;i++){
}
答案 4 :(得分:4)
这是对性能方面不同循环的一个很好的测试:http://jsben.ch/#/BQhED
答案 5 :(得分:0)
他们的“效率”或表现没有太大差异,请根据具体情况使用您的计划逻辑更容易理解。