【问题标题】:Javascript operator precedence question: i = i— + ++iJavascript 运算符优先级问题:i = i— + ++i
【发布时间】:2020-04-16 04:10:24
【问题描述】:

请考虑一下这段代码:

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

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

  1. i 加 1(前缀增量)
  2. i 被加到 i(加法)
  3. i 减 1(后置减量)
  4. 右边的值赋值给i(赋值操作)

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

我哪里做错了?

【问题讨论】:

  • 您在计算值时忽略了 #3。

标签: javascript operator-precedence


【解决方案1】:
var i = 1;
i = i-- + ++i;

这就是编译器将如何处理这段代码

  1. 创建一个名为 i 的变量
  2. 将 i 的值设置为 1
  3. (rhs 第一个元素) 取值 i (1) 递减值 (i 现在是 0)
  4. (rhs 第二个元素) i 的增量值 (i 现在是 1)
  5. 将 i 的值设置为 rhs (2)

【讨论】:

    【解决方案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      ;
    

    【讨论】:

      【解决方案3】:

      理解优先值的逻辑:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-10
        • 2018-05-01
        • 1970-01-01
        • 2017-03-30
        • 2012-07-29
        • 1970-01-01
        相关资源
        最近更新 更多