2013-11-20 121 views
0

if語句的對象究竟是什麼?if語句和運算符優先級的語法

如果我有:

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

這是否得到解釋爲:

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

或者是否得到解釋爲:

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

(這是最終同樣的事情,但我仍然對語法很好奇。)

+0

爲什麼你會放一個逗號的條件裏面?或者它只是一個代碼示例? –

回答

1

有三樣東西的括號內發生的事情,在這個順序:

  1. 函數調用
  2. 相等比較
  3. 逗號操作

代碼一步採取步驟:

// 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

1

逗號具有least priority,所以:

  • setX()將被評估第一
  • x === 5將被評估第二
  • if語句檢查x === 5
1

逗號運算符其兩個操作數並返回右操作數的值。因此,您的if語句將是setX()函數之後執行的x === 5測試的結果。

這是否是良好的編程風格。然而公開辯論.... :-)