優先性(Precedence)
決定運算子彼此之間被語法解析的方式,優先序較高的運算子會成為優先序較地運算子的運算元
相依性(Associativity)
相依性決定運算方向
在 MDN 參考文件中,將運算子優先性排列出來,優先性數字越大越先執行
範例:
let a = 1 * 2 + 3 * 4;
console.log(a); // 14
該範例運算子執行順序說明,
先執行優先性 14 的 *
再執行優先性 13 的 +
,最後才執行優先性 3 的 =
,
所以會先執行 1 * 2
和 3 * 4
,之後將回傳結果相加,最後賦予到 a 變數中,
其中 *
和 +
的相依性是由左至右,而 =
的相依性是由右至左
console.log(1 < 2 < 3); // true
console.log(3 > 2 > 1); // false
該範例可能會有疑惑為何 3 > 2 > 1
會是 false
,
其中 >
和 <
的相依性為由左至右
在講解前先看 1 < 2 < 3
執行順序,
該行程式碼會先執行 1 < 2
後取得結果 true
,
再使用回傳結果執行 true < 3
,
此時 true
會進行型別轉換成 1
,
所以 true < 3
被視為 1 < 3
,因此回傳 true
接著我們看 3 > 2 > 1
的執行過程
首先執行 3 > 2
,回傳結果為 true
,
之後執行 true > 1
,此時 true
會進行型別轉換成 1
,
因此視為 1 > 1
,所以回傳 false