JavaScript运算符优先级问题:i = i- + ++ i

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

请考虑以下代码段:

var i = 1;
i = i-- + ++i;

我对运算符和操作数的处理顺序的理解如下:

  1. i递增1(前缀增加)
  2. i被添加到i(加法)
  3. i减1(固定后减1)
  4. 右侧的值已分配给i(分配操作)

如果我的理解是正确的,那么我最终的值应该为3。但是,我使用一些在线JavaScript解释器打印了结果,而i的最终值为2。

我在哪里弄错了?

javascript operator-precedence
3个回答
0
投票
// 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 ;

0
投票
这是编译器将如何处理此代码的方式

创建一个名为i的变量

    将i的值设置为1
  1. [(rhs第一个元素)取i的值(1)减数值(i现在为0)
  2. [rhs第二个元素)i的增量值(i现在为1)
  3. 将i的值设置为rhs(2)

0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.