javascript 表达式中的后缀和前缀增量

问题描述 投票:0回答:6

我无法理解后缀和前缀增量在这样的表达式中的工作原理:

var x = 1;
x = ++x + x++ * x

为什么浏览器控制台返回 8 ?

javascript increment
6个回答
6
投票

从左到右评估:

++x           : x is now 2
++x +         : 2 + 
++x + x       : 2 + 2
++x + x++     : 2 + 2 and x is now 3
++x + x++ *   : 2 + 2 *
++x + x++ * x : 2 + 2 * 3

2
投票

var x = 1; x = ++x + x++ * x

按照

++x => 2 (After pre-fix's updated value)
x++ => 2 (Post-fix will update in second sequence not now)
x   => 3 (After post-fix's updated value)

所以

x = 2 + 2 * 3 

按照优先级乘法 它会

x = 2 + 6

因此

x = 8 

1
投票

您可以在这个网站了解更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment 原因如下:

  1. x = 1; X 是 1。
  2. x = ++x;现在 x 增加了 1。(X 是 2)
  3. x = ++x + x++ * x

由于乘法总是首先计算,因此我们将 x++ 乘以 x。请记住,x 的值为 2。

这就是数学表达式的样子:

x = 1; 
x = 1+1+2+1*3

我们将 x++ 乘以 x。请记住,x 是 2。所以它看起来像这样:

x = 1+1 +(2+1{2})

现在我们将计算括号内的数字。

2+1*2 = 6

之后,我们可以将 2 加 6 得到 8。

2+6=8

这就是原因。


0
投票
x = ++x + (x++ * x)

将其视为数学运算,从左到右。

++x = x is now 2
x++ = x is now 3 but the showed value remains 2
x = is 3

x = 2 + (2 * 3)
x = 8

0
投票

按照运算符优先顺序执行并返回值,步骤如下:

++x => 2 // returns current value after increment
x++ => 2 // returns old value, here old value is 2 because already increment before
x++ * x => 2 * 3 => 6  // x returns stored current value after 2 times increment
++x + 6 => 2 + 6 => 8 // Output is 8

注意 ++x 和 x++ 都将变量加 1 并将值存储到变量(x)。但这里有一个简单的区别 ++x(前缀增量运算符)返回当前值,而 x++(后缀增量运算符)返回旧值。


0
投票

前缀(++变量) 当 ++ 运算符在变量之前使用时,它会在表达式中使用该值之前递增变量的值

let a = 5;
let b = ++a; // a is incremented to 6, then b is assigned the value of 6
console.log(a); // 6
console.log(b); // 6

后缀(变量++) 当 ++ 运算符在变量之后使用时,它会在表达式中使用该值后递增变量的值。

let a = 5;
let b = a++; // b is assigned the value of 5, then a is incremented to 6
console.log(a); // 6
console.log(b); // 5
© www.soinside.com 2019 - 2024. All rights reserved.