Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中什么更有效:while还是for语句?_Javascript_Performance - Fatal编程技术网

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

在Javascript中什么更有效:while还是for语句?,javascript,performance,Javascript,Performance,我最近有机会用javascript做循环,我很困惑是使用for循环还是while语句 var i = foo.length; while(i--){ } 或 用于(var i=0;i理论上,while循环更快,因为for循环每次通过循环都会查找foo的length属性,但在现实世界中,它将产生无法估量的微小差异。for循环是while循环的语法糖。它们应该完全相同 但是,您的两个循环在语义上是不同的。一个循环计数为零,而另一个循环计数为对象的某个属性,该属性的速度必然较慢,尽管速度稍慢

我最近有机会用javascript做循环,我很困惑是使用for循环还是while语句

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

 }


用于(var i=0;i理论上,
while
循环更快,因为
for
循环每次通过循环都会查找
foo
length
属性,但在现实世界中,它将产生无法估量的微小差异。

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

但是,您的两个循环在语义上是不同的。一个循环计数为零,而另一个循环计数为对象的某个属性,该属性的速度必然较慢,尽管速度稍慢。将上述while循环与以下for循环进行比较更有意义:

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

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


e、 g
while(i在某些浏览器中,循环的某些方式更快-例如,在Chrome中,
for
循环的速度是所有浏览器的两倍多,但在所有浏览器中都没有一致的赢家。如果你在一个浏览器中发现了一个使其真正快速的技巧,你将在另一个浏览器中受到惩罚

不同浏览器的实际性能测试:


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

它们的“效率”没有太大区别或者性能,根据具体情况,使用使程序逻辑更容易理解的选项。

这里有一个关于不同循环性能的良好测试:

我不知道其中一个循环比另一个更有效,因为每个循环都涉及相同数量的赋值和比较。为了可读性,我会选择“fo”r'循环,但这是个人偏好。你可以自己尝试。这不是效率的问题,而是偏好和可读性的问题。正如@pimvdb的测试所显示的那样,没有实际的区别。@pimvdb,感谢基准测试:)(fwiw,
for
快约16%,而在我的机器上使用Firefox 5时对于这个特定的例子来说,这是正确的,其中语句执行不同的操作,因为(i=foo.length;i>0;i--)不会在每次迭代中查找foo的length属性,但这是一个O(1)操作,您甚至可以在for()的第一部分中执行。for(var i=0,arrLength=arr.length;ifor (var i = foo.length; i--;) { }
var fooLength = foo.length;
 for(var i=0 ;i<= fooLength;i++){

 }