在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]
+1
而不是++
,那么这会是什么样子?在添加数字时是否有一种在之前或之后递增的方法? - Keavonx
一开始是10,那么r1
的值为21,即10加11。第一个x++
表达式的值为10,x
增加到11。第二个x++
表达式的值为11,x
增加到12。” - Jon Skeetx
的值(这就是为什么如果x
最初为10,则最终结果为12),并且在两种情况下,表达式的值都是在增加之前的x
的值。(但是第二个x++
当然是在第一个增量发生之后被评估的...) - Jon Skeet++x
会先将变量加1,然后再使用这个值。x++
会先使用这个值,然后再将变量加1。var n = 0, m = 0;
alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */
请注意,使用++x
会带来轻微的性能优势,因为您会先读取变量,对其进行修改,然后对其进行评估和存储。相对于x++
操作符,您需要先读取值,进行评估,修改它,然后再存储。
据我理解,如果您将它们作为单独的语句使用,则它们执行相同的操作。但如果您尝试将它们的结果输出为表达式,则它们可能会有所不同。尝试alert(i++)与alert(++i)以查看差异。i++在加法之前评估i,而++i在评估之前执行加法。
请参见http://jsfiddle.net/xaDC4/了解示例。
我对理解后置递增和前置递增有一种解释。所以我把它放在这里。
让我们将x
赋值为0
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
希望这有助于您理解后增量和前增量的含义!
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
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
如果可能的话,使用++i
更清晰、更快:
++i
保证您使用的是i
的一个值,除非您改变i
,否则它将保持不变i++
允许使用一个在“不久的将来”会发生变化的i
的值,如果可能的话,这是不可取的当然,实际上并没有快多少,只是稍微快一点。