这话我听过好几次了。JavaScript循环在向后计数时真的更快吗?如果有,为什么?我已经看到了一些测试套件示例,它们显示反向循环更快,但我找不到任何解释!

我假设这是因为循环不再需要在每次检查属性时评估它是否已经完成,它只检查最终的数值。

即。

for (var i = count - 1; i >= 0; i--)
{
  // count is only evaluated once and then the comparison is always on 0.
}

当前回答

For (var I = array.length;我,)快不了多少。但是当你替换数组时。使用super_puper_function(),这可能会快得多(因为它在每次迭代中都被调用)。这就是区别。

如果你打算在2014年改变它,你不需要考虑优化。如果你打算用“搜索和替换”来改变它,你不需要考虑优化。如果你没有时间,你不需要考虑优化。但是现在,你有时间考虑一下。

注:i——并不比i++快。

其他回答

在许多情况下,这本质上与处理器比其他比较更快地比较0这一事实无关。

这是因为只有少数Javascript引擎(JIT列表中的那些)真正生成机器语言代码。

大多数Javascript引擎构建源代码的内部表示,然后对其进行解释(要了解这是什么样子,请查看Firefox的SpiderMonkey页面底部附近)。一般来说,如果一段代码实际上做同样的事情,但导致更简单的内部表示,它将运行得更快。

请记住,对于简单的任务,如从一个变量中添加/减去一个,或将一个变量与某个东西进行比较,解释器从一个内部“指令”移动到下一个“指令”的开销是相当高的,因此JS引擎内部使用的“指令”越少越好。

回答这类问题的最好方法就是亲自去尝试。建立一个计算百万次迭代的循环,并以两种方式进行。对两个循环进行计时,并比较结果。

答案可能取决于您使用的浏览器。有些会有不同的结果。

帮助别人避免头痛——投票吧!!

本页上最流行的答案在Firefox 14上不工作,并且没有通过jsLinter。while循环需要比较操作符,而不是赋值操作符。它可以在chrome、safari甚至ie浏览器上运行。但在firefox中消亡了。

这个坏了!

var i = arr.length; //or 10
while(i--)
{
  //...
}

这会有用的!(在firefox上工作,通过jsLinter)

var i = arr.length; //or 10
while(i>-1)
{
  //...
  i = i - 1;
}

这个人比较了javascript和很多浏览器中的循环。他还提供了一个测试套件,您可以自己运行这些测试。

在所有情况下(除非我在阅读中遗漏了一个),最快的循环是:

var i = arr.length; //or 10
while(i--)
{
  //...
}

爱死它了,很多分数但没有回答:D

简单地把比较放在零总是最快的比较

因此(a==0)返回True比(a==5)更快

它很小且无关紧要,并且集合中有1亿行,因此它是可测量的。

例如,在循环中,你可能会说where I <= array。长度和I的增量

在下行循环中,你可能会说I >= 0,而不是减去I。

比较速度更快。而不是循环的“方向”。