++;someVariable vs.someVariable++;在JavaScript中

++;someVariable vs.someVariable++;在JavaScript中,javascript,increment,unary-operator,Javascript,Increment,Unary Operator,在JavaScript中,可以在变量名之前(增量前)或之后(增量后)使用++运算符。如果有的话,这些递增变量的方法之间有什么区别?与其他语言相同: ++x(预增量)表示“增加变量;表达式的值为最终值” x++(增量后)表示“记住原始值,然后增加变量;表达式的值就是原始值” 现在,当用作独立语句时,它们的含义相同: x++; ++x; 当您在其他地方使用表达式的值时,就会出现差异。例如: x = 0; y = array[x++]; // This will get array[0] x

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

与其他语言相同:

  • ++x
    (预增量)表示“增加变量;表达式的值为最终值”
  • x++
    (增量后)表示“记住原始值,然后增加变量;表达式的值就是原始值”
现在,当用作独立语句时,它们的含义相同:

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

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

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

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

请参阅以获取示例。

  • ++x
    增加该值,然后计算并存储该值
  • x++
    计算值,然后递增并存储它
var n=0,m=0;
警报(n++);/*显示0,然后存储n=1*/
警报(++m);/*显示1,然后存储m=1*/
请注意,在可能的情况下使用
++x
对性能有一些好处,因为您可以读取变量,修改它,然后计算并存储它。相对于
x++
操作符,您可以在其中读取值,计算值,修改值,然后存储值

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
分配给
x

let x = 0;
让我们从后增量开始

console.log(x++); // Outputs 0
console.log(++x); // Outputs 2
为什么?

让我们分解
x++
表达式

x = x;
x = x + 1;
x = x + 1;
x = x;
第一条语句返回
x
的值,即
0

稍后,当您在任何位置使用
x
变量时,将执行第二条语句

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

请记住此状态下
x
的值为
1

现在让我们从预增量开始

console.log(x++); // Outputs 0
console.log(++x); // Outputs 2
为什么?

让我们将
++x
表达式分解

x = x;
x = x + 1;
x = x + 1;
x = x;
第一条语句返回这个
x+1
表达式的值,它是
(1+1)=2

第二条语句返回
x
的值,该值为
2
so
x=2
,因此返回
2


希望这能帮助你理解什么是增量后和增量前

该死的,如果我没有停下来加载一个实用的JSFIDLE答案,我差点就给你一个答案如果使用
+1
而不是
++
,这会是什么样子?在添加数字时,有没有一种方法可以在之前或之后递增?我想知道为什么要执行此操作:常量r1=(x+++(x++);根据你的例子,它不会产生预期的结果。@JeanJimenez:它产生了我预期的结果。例如,如果
x
以10开头,则
r1
的值为21,即10+11。第一个
x++
表达式的值是10,
x
增加到11。第二个
x++
表达式的值是11,
x
增加到12。亲爱的@JonSkeet感谢您的快速响应,我对学习JavaScript还不熟悉,我的困惑在于为什么一个增加而另一个不增加。在所有情况下,我们能保证Javascript的行为都是这样吗?或者您认为在更复杂的语句中使用increment语句是一种不好的做法吗?实际上是一个副本。我已经删除了答案,但是加了一句:“看看ECMA-262,它似乎很明确。”