【问题标题】:Is there a performance difference between i++ and ++i in JavaScript? [closed]JavaScript 中的 i++ 和 ++i 之间是否存在性能差异? [关闭]
【发布时间】:2012-09-12 08:31:49
【问题描述】:

我读到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 表示法,除非它对于用例来说是明确错误的。
  • 任何像样的js引擎都应该是一样的
  • 我听说有一个 jsperf.com 但不知道怎么用。
  • 可以肯定这对于真正的性能来说是微不足道的。

标签: javascript performance operators post-increment pre-increment


【解决方案1】:

这是一篇关于这个话题的文章:http://jsperf.com/i-vs-i/2

++i 似乎稍微快了一点(我在 Firefox 上测试过),根据这篇文章,一个原因是:

使用 i++,在您可以在后台增加 i 之前,必须创建 i 的新副本。使用 ++i 你不需要那个额外的副本。 i++ 将在增加 i 之前返回当前值。 ++i 返回递增的版本 i。

【讨论】:

  • 这真的更像是一个评论。答案将解释该链接如何回答问题。
  • @jasper 我来了 :)
  • 这取决于您的浏览器。 ++i 在 safari 中速度较慢,但​​在某些浏览器中更快。
  • “必须在后台创建一个 i 的新副本” - 仅当您使用结果时...
【解决方案2】:

没有。执行时间没有区别。两个代码 sn-ps 的区别在于 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 上进行的迭代次数减少之外没有其他性能差异,因为增量是在第一次操作之前完成的

【讨论】:

  • 我不知道为什么投反对票。 jidma 的答案中链接到的 JSPerf 表明两者的性能相同。
  • 同意,相差不到 1%。 ++i 在 Safari 6.x 中显示慢 1%。解释差异的一个很好的例子是var i = 0; alert(++i); vs var i = 0; alert(i++);
  • -1。两个代码打印相同的东西。
  • @KarolyHorvath 我同意,为了得到不同的结果,它应该是for(i = 0; i &lt; max; ) console.log(++i) vs for(i = 0; i &lt; max; ) console.log(i++)
猜你喜欢
  • 2010-10-02
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2014-02-23
  • 2010-09-18
相关资源
最近更新 更多