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

use*_*196 7 javascript performance

我最近有机会在javascript中循环,我很困惑是否使用for循环或while语句.

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

 }
Run Code Online (Sandbox Code Playgroud)

要么

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

 }
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*dle 9

理论上,while循环更快,因为for循环通过循环查找每次的length属性foo,但在实际使用中,它将产生不可估量的小差异.


Guf*_*ffa 7

在某些浏览器中,某些循环方式更快 - 例如,在Chrome中,for循环速度是其两倍,但在所有浏览器中并没有一致的赢家.如果你发现一个技巧可以在一个浏览器中快速实现它,你将在另一个浏览器中受到惩罚.

不同浏览器的实际性能测试:http://jsperf.com/for-or-while

您应该使用对情况有意义的循环类型.在许多情况下,你在循环中所做的事情比循环本身需要更长的时间.


Mar*_*tos 5

For 循环是 while 循环的语法糖。它们应该是完全相同的。

但是,您的两个循环在语义上是不同的。一个计数到零,而另一个计数到对象的属性,这必然会慢一些,尽管只是稍微慢一些。将上面的 while 循环与下面的 for 循环进行比较会更有意义:

for (var i = foo.length; i--;) { }
Run Code Online (Sandbox Code Playgroud)


Hea*_*ota 5

实际上,您使用哪个循环没有显着差异。我读过的每一本书都这么说。您的示例可能有所不同,因为您在 while 循环中使用了递减循环。它往往会更快,因为只评估一个条件。

例如while(i<100)慢于while(i--)

对于 for 循环,您可以在循环之前存储长度并处理该值,而不是每次都检索它。它还会给你一些性能优化。

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

 }
Run Code Online (Sandbox Code Playgroud)


Esc*_*ape 5

这是对不同循环性能的良好测试:http://jsben.ch/#/BQhED