JavaScript中,i++和++i之间是否存在性能差异?

13
我阅读了来自stackoverflow的内容 Is there a performance difference between i++ and ++i in C?:

如果结果值不被使用,i++++i 之间是否存在性能差异?

JavaScript 的答案是什么?

例如,下面哪个更好?

  1. for (var i = 0; i < max; i++) {
      // code
    }
    
  2. for (var i = 0; i < max; ++i) {
      // code
    }
    

对你来说可能不重要。我倾向于使用++i符号,除非它在使用情况下明确是错误的。 - duffymo
使用任何良好的JS引擎,它应该是相同的。 - Karoly Horvath
我听说有一个jsperf.com,但不确定如何使用它。 - Tina CG Hoehr
相信这对于真正的性能来说是微不足道的。 - elclanrs
JavaScript 优化:后增和前增的比较 - Yves M.
2个回答

15
这是一篇关于这个主题的文章:http://jsperf.com/i-vs-i/2 在 Firefox 上测试,++i 似乎比 i++ 稍微快一些。根据这篇文章,其中一个原因是:

在使用 i++ 时,在增加 i 的底层实现之前必须创建 i 的新副本。而使用 ++i 则不需要这个额外的副本。i++ 在递增 i 之前返回当前值。++i 返回递增后的 i。


这其实更像是一条评论。一个回答应该解释那个链接如何回答了问题。 - Jasper
@jasper 我正要说到这个 :) - Majid Laissi
这取决于您的浏览器。在Safari中,++i较慢,但在某些浏览器中较快。 - Mark
在幕后,必须创建一个新的 i 的副本,只有在您使用结果时... - Karoly Horvath

-5

不,执行时间没有区别。这两个代码片段的区别在于 i 的递增时机。

for(i = 0; i < max; i++)
{
    console.log(i);
}

这个第一个示例将产生结果:0,1,2,3,...,max-1

for(i = 0; i < max; ++i)
{
    console.log(i);
}

这个第二个例子将产生结果:1,2,3,...,max
i++ 在操作之后增加值。 ++i 在操作之前增加值。
除了在 ++i 上少进行一次迭代,没有其他性能差异,因为增量是在第一个操作之前完成的。

4
两种代码打印相同的内容。 - Karoly Horvath
1
http://jsbin.com/oninoy/1/edit - elclanrs
1
@KarolyHorvath 我同意,为了得到不同的结果,应该使用 for(i = 0; i < max; ) console.log(++i) 而不是 for(i = 0; i < max; ) console.log(i++) - Majid Laissi
“console.log” 是否足够缓慢,可以隐藏 ++i 和 i++ 之间的差异? - Qi Fan
@Nateowami:我只是想知道,用一些可能比要测量的东西(i++或++i)慢得多的无关函数调用来计时循环是否有意义。如果控制台是一个缓慢的串行端口或打孔卡片会怎样? - Qi Fan
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接