2017-08-30 258 views
-1

根據Mozilla,===運算符的優先級高於 。運營商,這是我所期望的。JavaScript運算符優先級

但是,此語句評估爲數字1,而不是假。

let x = 1 || 0 === 0; // x === 1; 

你必須在括號包裹取得布林:

let x = (1 || 0) === 0; // x === false; 

是怎麼回事?

注:這是不是這個問題,它沒有關於平等的運營商什麼的DUP - JavaScript OR (||) variable assignment explanation

+3

它從左到右進行評估。 「||」的左側評估爲真值,因此「||」的右側永遠不會被評估。 – Will

+0

[JavaScript OR(||)變量賦值說明](https://stackoverflow.com/questions/2100758/javascript-or-variable-assignment-explanation) –

+0

[Short-circuit evaluation](https:// developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Short-circuit_evaluation) – j08691

回答

4

更高operator precedence就像是周圍的操作數括號。

let x = 1 || (0 === 0); 

第二部分從未得到評估,因爲1 的truthy價值。

4

||是一個短路操作和條件評估從左到右。
所以這裏:left || right,如果left條件是true,整個條件評估爲trueright永遠不會被評估。

這裏:

let x = 1 || 0 === 0; // x === 1; 

x = 1分配1x||之後的第二個條件是從來沒有評價爲if (1)evaluatedtrue

在這裏:

let x = (1 || 0) === 0; // x === false; 

(1 || 0)進行評估,以作爲trueif (1)仍然evaluatedtrue
然後true === 0被評估爲false
所以x的價值爲false