什么在Javascript中更有效:while或for语句?

时间:2011-08-14 10:59:40

标签: javascript performance

我最近有机会在javascript中进行循环,我对使用for循环还是while语句感到很困惑。

 var i = foo.length;
 while(i--){

 }

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

 }

我想从javascript人那里知道哪一个更有效,在什么情况下我们应该相应地使用它们。这与java中的原因相同或不同。

6 个答案:

答案 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)

他们的“效率”或表现没有太大差异,请根据具体情况使用您的计划逻辑更容易理解。