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++的主要内容,如果未能解决你的问题,请参考以下文章