172

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

4

6 回答 6

316

与其他语言相同:

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

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

x++;
++x;

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

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

x = 0;
y = array[++x]; // This will get array[1]
于 2010-08-12T16:31:36.017 回答
63
  • ++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++您读取值,评估它,修改它,然后存储它的操作员相比。

于 2010-08-12T16:34:49.910 回答
9

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

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

于 2010-08-12T16:34:02.347 回答
5

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

让我们分配0x

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因此2x = 2返回2

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

于 2020-06-18T06:49:59.807 回答
4
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

于 2017-11-15T21:06:26.290 回答
2
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
于 2016-03-17T15:43:47.883 回答