if语句和运算符优先级的语法

时间:2013-11-20 10:15:29

标签: javascript if-statement syntax conditional

if语句的内容究竟是什么?

如果我有:

if(setX(), x === 5)

这会被解释为:

if((setX(), x) === 5) // which is the same as:
setX(); if(x === 5)

或者它被解释为:

if((setX()), (x === 5))

(这最终是一回事,但我仍然对语法感到好奇。)

3 个答案:

答案 0 :(得分:1)

逗号有least priority,所以:

  • setX()将首先评估
  • x === 5将被评估为第二个
  • if语句检查x === 5

答案 1 :(得分:1)

逗号运算符计算其两个操作数并返回右操作数的值。因此,if语句将是在setX()函数之后执行的x === 5测试的结果。

这是否是一个好的编程风格然而有争议....: - )

答案 2 :(得分:1)

这些括号内有三件事情按顺序发生:

  1. 函数调用
  2. 平等比较
  3. 逗号运算符
  4. 一步一步采取的代码:

    // setup
    function setX(){
      return 3;
    }
    x = 4;
    
    // steps
    if (setX(),x === 5)
    // evaluate function call
    if (3,4 === 5)
    // evaluate equality comparison
    if (3,false)
    // evaluate comma operator
    if (false)
    // jump to the appropriate code branch
    

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence