JavaScript 中的 ++someVariable 与 someVariable++

Posted

技术标签:

【中文标题】JavaScript 中的 ++someVariable 与 someVariable++【英文标题】:++someVariable vs. someVariable++ in JavaScript 【发布时间】:2011-03-29 01:07:01 【问题描述】:

javascript 中,您可以在 (pre-increment) 或在变量名 (post-increment) 之后使用 ++ 运算符。这些递增变量的方法之间有什么区别(如果有的话)?

【问题讨论】:

另见与语言无关的Difference between i++ and ++i in a loop? 我昨天在阅读this response 到关于bad assumptions in C/C++ 的问题时正在考虑这个问题。在所有情况下,我们都能保证 Javascript 的行为方式是这样的吗?还是您认为在更复杂的语句中使用增量语句是不好的做法? The previous comment 实际上是an answer (a non-answer, rather) I posted in 2010 的副本。我已经删除了答案,但 Jon Skeet had replied 的答案是:“看看 ECMA-262,它的规格似乎相当合理。” 【参考方案1】:

与其他语言相同:

++x (pre-increment) 意思是“增加变量;表达式的值是最终值” x++(后自增)意思是“记住原值,然后递增变量;表达式的值就是原值”

现在,当用作独立语句时,它们的含义相同:

x++;
++x;

当您在其他地方使用表达式的值时,差异就出现了。例如:

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]

【讨论】:

诅咒,如果我没有停下来加载一个实用的 jsfiddle 答案,我几乎击败了你。 ;-) 如果您使用+ 1 而不是++,会是什么样子?添加数字时有没有办法在前后递增? 我想知道为什么如果你做这个操作 const r1 =(x++)+(x++);根据您的示例,它不会产生预期的结果。 @JeanJimenez:嗯,它产生了 期望的结果。例如,如果x 以 10 开头,则 r1 的值为 21,即 10+11。第一个x++ 表达式的值为10,x 递增为11。第二个x++ 表达式的值为11,x 递增为12。 亲爱的@JonSkeet 感谢您的超快响应,我是学习 JavaScript 的新手,我的困惑是为什么一个递增而另一个不递增。【参考方案2】:

据我了解,如果您单独使用它们,它们会做同样的事情。如果您尝试将它们的结果作为表达式输出,那么它们可能会有所不同。尝试将 alert(i++) 与 alert(++i) 进行比较以查看差异。 i++ 在加法之前对 i 求值,++i 在求值之前进行加法。

有关示例,请参阅 http://jsfiddle.net/xaDC4/。

【讨论】:

【参考方案3】: ++x 递增值,然后计算并存储它。 x++ 计算值,然后递增并存储它。
var n = 0, m = 0;

alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */

请注意,在可能的情况下使用++x 会带来轻微的性能优势,因为您读取变量、修改它,然后评估并存储它。与 x++ 运算符相比,您在其中读取值、评估它、修改它,然后存储它。

【讨论】:

【参考方案4】:
var x = 0, y = 0;

//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x);    //1

//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y);   //1

【讨论】:

【参考方案5】:
var a = 1;
var b = ++a;
alert('a:' + a + ';b:' + b); //a:2;b:2

var c = 1;
var d = c++;
alert('c:' + c + ';d:' + d); //c:2;d:1

jsfiddle

【讨论】:

【参考方案6】:

我对理解后增量和前增量有一个解释。所以我把它放在这里。

让我们将0 分配给x

let x = 0;

让我们从后增量开始

console.log(x++); // Outputs 0

为什么?

让我们分解x++ 表达式

x = x;
x = x + 1;

第一条语句返回x的值,即0

然后当你在任何地方使用x 变量时,就会执行第二条语句

第二条语句返回 x + 1 表达式的值,即 (0 + 1) = 1

记住x 在此状态下的值1

现在让我们从预增量开始

console.log(++x); // Outputs 2

为什么?

让我们分解++x 表达式

x = x + 1;
x = x;

第一个语句返回x + 1 表达式的值,即(1 + 1) = 2

第二条语句返回x 的值,即2 所以x = 2 因此它返回2

希望这能帮助您了解什么是后增量和前增量!

【讨论】:

以上是关于JavaScript 中的 ++someVariable 与 someVariable++的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript]JavaScript中的Array

javascript获取html表单中的值?

JavaScript中的对象

javascript JavaScript中的枚举和词典,循环/枚举javascript对象

javascript中的DOM

JavaScript中的内置函数