【问题标题】:What is more efficient in Javascript : while or for statements?Javascript 中什么更有效:while 或 for 语句?
【发布时间】:2026-02-12 15:20:01
【问题描述】:

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

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

 }

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

 }

我想从 javascript 人那里知道哪一个更有效,以及在什么情况下我们应该相应地使用它们。是和java中的原因一样还是有些不同。

【问题讨论】:

  • 我不知道一个会比另一个更有效,因为每个都涉及相同数量的分配和比较。为了可读性,我会使用“for”循环,但这是个人喜好。
  • 您可以通过jsperf.com/for-vs-while-loop-iterating自己尝试。
  • 这不是效率问题,而是偏好和可读性问题。正如@pimvdb 的测试显示的那样,没有实际区别。
  • @pimvdb,感谢您的基准测试 :)(fwiw,for 在我的机器上使用 Firefox 5 比 while 快约 16%。)

标签: javascript performance


【解决方案1】:

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

【讨论】:

  • 对于这个特定的例子来说是正确的,其中语句正在做不同的事情,for(i = foo.length; i > 0; i--) 不会查找 foo on 的长度属性每次迭代,但无论如何这是一个 O(1) 操作
【解决方案2】:

在某些浏览器中,某些循环方式更快 - 例如,在 Chrome 中,for 循环的速度是前者的两倍多,但在所有浏览器中并没有一致的赢家。如果你在一个浏览器中找到了让它变得非常快的技巧,你将在另一个浏览器中受到惩罚。

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

您应该使用对这种情况有意义的循环类型。在许多情况下,您在循环中执行的操作比循环本身花费的时间要长得多。

【讨论】:

    【解决方案3】:

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

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

    for (var i = foo.length; i--;) { }
    

    【讨论】:

      【解决方案4】:

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

      例如 while(i&lt;100)while(i--)

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

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

      【讨论】:

      • 你甚至可以在 for() 的第一部分做到这一点。 for( var i = 0, arrLength = arr.length; i
      【解决方案5】:

      这里是对不同循环在性能方面的一个很好的测试:http://jsben.ch/#/BQhED

      【讨论】:

        【解决方案6】:

        它们的“效率”或性能没有太大区别,请根据具体情况使用使您的程序逻辑更易于理解的任何一种。

        【讨论】:

          最近更新 更多