if語句的對象究竟是什麼?if語句和運算符優先級的語法
如果我有:
if(setX(), x === 5)
這是否得到解釋爲:
if((setX(), x) === 5) // which is the same as:
setX(); if(x === 5)
或者是否得到解釋爲:
if((setX()), (x === 5))
(這是最終同樣的事情,但我仍然對語法很好奇。)
if語句的對象究竟是什麼?if語句和運算符優先級的語法
如果我有:
if(setX(), x === 5)
這是否得到解釋爲:
if((setX(), x) === 5) // which is the same as:
setX(); if(x === 5)
或者是否得到解釋爲:
if((setX()), (x === 5))
(這是最終同樣的事情,但我仍然對語法很好奇。)
有三樣東西的括號內發生的事情,在這個順序:
代碼一步採取步驟:
// 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
逗號具有least priority,所以:
setX()
將被評估第一x === 5
將被評估第二if
語句檢查x === 5
逗號運算符其兩個操作數並返回右操作數的值。因此,您的if語句將是setX()函數之後執行的x === 5測試的結果。
這是否是良好的編程風格。然而公開辯論.... :-)
爲什麼你會放一個逗號的條件裏面?或者它只是一個代碼示例? –