JavaScript for 循环中的 i++ 与 ++i

i++ vs. ++i in a JavaScript for loop

因为 JSLint,我几乎总是使用 i += 1 来增加一个 JavaScript for 循环,但对于快速和肮脏的脚本,我使用 i++ 代替。
但是,我在其他人的代码中看到很多 for 循环,他们通过执行 ++i 来增加 i

据我所知,i++++i在含义上没有区别,jsPref在性能上也没有区别。
因此,我想知道做 ++i 的惯例从何而来以及为什么人们倾向于这样做。

有谁知道为什么很多 JS 编码人员在 for 循环中递增计数器时倾向于选择 ++i 而不是 i++
谢谢。

区别,但在 for 循环中使用时没有区别。

在表达式中,i++ 求值为 i 的前一个值,然后 i 递增。 ++i 先自增,再求值。

出于这个原因,一些程序员更喜欢在他们的 for 循环中编写 ++i — 要么是因为他们已经习惯了,要么是因为他们觉得它是 "more right" 不知何故。

编辑:更有可能的是Overv提出的解决方案:C的遗物。

区别在于i++ return是i递增前的值,++ii递增后的值。如果您忽略 return 值,则没有区别,例如在:

for (var i = 0; i < 10; i++) {

}

使用 ++i 而不是 i++ 的习惯来自 C,人们担心将 i 的旧值存储在 i++ 中会导致性能下降.

在 JS 和 PHP 中它没有任何区别,我认为即使在 Java 中它也没有任何区别但是在纯 c 中当编译器没有优化代码时它确实如此,而且这就是为什么很多人使用++i的原因,因为他们从c开始就习惯了。

编辑: 如果您想要 pre 和 post increment searc C/C++ pre/post increment 的历史记录,这是 JS 的答案。或查看对@Orvev 回答的评论。

回到过去(我们在这里谈论 IE6/7!),我记得对这两种形式进行基准测试,发现 ++ii++ 有一个小的性能改进].我的(未经证实的)理论是,一个非优化的 JS 引擎必须在 i++ 情况下做更多的工作:它必须保存以前的值以防它被使用——并且是一个非优化的engine 它没有意识到该值实际上不会被使用并且不需要保存。

但是,对于现代浏览器,没有明显的区别。如果有的话,i++ 在许多浏览器中似乎要快一点。

以下是各种不同循环的一些测试:

http://jsperf.com/mikes-loops/5

查找 "Traditional Loop"(这里使用 ++i)和 "Traditional Loop with i++".

的结果

关于 JSLint 的要求,即 永远不要 使用 ++ii++ 而只使用 i += 1 ,这简直是疯了-控制,就像 JSLint 中的许多其他东西一样。

我个人推荐 JSHint。它不那么教条,更实用,更容易定制您自己的风格。