Javascript 运算符优先级问题:i = i— + ++i
Javascript operator precedence question: i = i— + ++i
请考虑这段代码:
var i = 1;
i = i-- + ++i;
我对运算符&操作数的处理顺序的理解如下:
- i加1(前缀增量)
- i被加到i(加法)
- i减1(post-固定减量)
- 右边的值赋给i(赋值操作)
如果我的理解是正确的,i 的最终值应该是 3。但是,我使用一些在线 javascript 解释器打印出结果,i 的最终值是 2。
我哪里错了?
JavaScript 总是按从左到右的顺序计算子表达式,然后应用运算符:
// parentheses added for clarity
i = (i--) + (++i); // i = 1
i = 1 + (++i); // i = 0 after i--
i = 1 + 1 ; // i = 1 after ++i
i = 2 ;
var i = 1;
i = i-- + ++i;
这就是编译器处理这段代码的方式
- 创建一个名为 i 的变量
- 将 i 的值设置为 1
- (rhs第一个元素)取i的值(1)减值(i现在为0)
- (rhs 第二个元素) i 的增量值(i 现在是 1)
- 将 i 的值设置为 rhs (2)
理解优先值的逻辑:
var i = 1;
i = i-- + ++i;
prefix increment(++i) precedence = 17
postfix decrement(i--) precedence = 16
addition(+) precedence = 14
i = 1 + 1
i = 2
可以在以下位置找到更多与优先级相关的信息,
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
请考虑这段代码:
var i = 1;
i = i-- + ++i;
我对运算符&操作数的处理顺序的理解如下:
- i加1(前缀增量)
- i被加到i(加法)
- i减1(post-固定减量)
- 右边的值赋给i(赋值操作)
如果我的理解是正确的,i 的最终值应该是 3。但是,我使用一些在线 javascript 解释器打印出结果,i 的最终值是 2。
我哪里错了?
JavaScript 总是按从左到右的顺序计算子表达式,然后应用运算符:
// parentheses added for clarity
i = (i--) + (++i); // i = 1
i = 1 + (++i); // i = 0 after i--
i = 1 + 1 ; // i = 1 after ++i
i = 2 ;
var i = 1;
i = i-- + ++i;
这就是编译器处理这段代码的方式
- 创建一个名为 i 的变量
- 将 i 的值设置为 1
- (rhs第一个元素)取i的值(1)减值(i现在为0)
- (rhs 第二个元素) i 的增量值(i 现在是 1)
- 将 i 的值设置为 rhs (2)
理解优先值的逻辑:
var i = 1;
i = i-- + ++i;
prefix increment(++i) precedence = 17
postfix decrement(i--) precedence = 16
addition(+) precedence = 14
i = 1 + 1
i = 2
可以在以下位置找到更多与优先级相关的信息, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence