JavaScript中的++ someVariable与someVariable ++


135

在JavaScript中,您可以在变量名++之前(pre-increment)或之后(post-increment)使用运算符。这些增加变量的方式之间的区别(如果有)?



昨天我在阅读有关C / C ++错误假设的问题时对此进行了思考。在所有情况下,我们都可以保证Javascript具有这种行为吗?还是您认为在更复杂的语句中使用增量语句是不好的做法?
palswim

先前的评论实际上是我在2010年发布的答案(而非答案)的副本。我已经删除了答案,但乔恩·斯凯特(Jon Skeet )回答说:“看ECMA-262,它似乎有足够的详细说明。”
palswim

Answers:


242

与其他语言相同:

  • ++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]

13
诅咒,如果我不停止加载实用的jsfiddle答案,我几乎击败了您。;-)
克里斯

2
如果您使用+ 1而不是它会是什么样++?加数之前或之后是否有增加方法?
Keavon 2014年

我想知道为什么要执行此操作const r1 =(x ++)+(x ++); 根据您的示例,它不会产生预期的结果。
Jean Jimenez

1
@JeanJimenez:好吧,它产生了期望的结果。例如,如果x以10开始,则值r1是21,即10 + 11。所述第一的值x++表达是10和x被递增到11第二的值x++表达为11,x被递增到12
乔恩斯基特

亲爱的@JonSkeet感谢您的超快速响应:我是学习JavaScript的新手,而我的困惑在于为什么一个递增而另一个却不递增。
Jean Jimenez

43
  • ++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++您在其中读取值的操作员进行比较,对其进行评估,对其进行修改,然后将其存储。


7

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

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


2
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


0
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

0

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

让分配0x

let x = 0;

让我们从后增量开始

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

为什么?

让我们分解一下x++表情

x = x;
x = x + 1;

第一条语句返回的值x0

然后,当您x在任何地方使用变量时,第二条语句将被执行

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

请记住x在此状态下的值是1

现在让我们从预增量开始

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

为什么?

让我们分解一下++x表情

x = x + 1;
x = x;

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

第二条语句返回的值x2这样x = 2因而回报2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.