克服 Javascript 的奇怪部分 運算子的相依性與優先性

在了解以下的特性以前需要知道,JavaScript 是 syncrounous 同步在執行一個表達式的,
所以一次只能執行一個片段的程式碼,也就是一個表達式,一個表達式只能包含一個運算子與兩個參數,所以需要決定執行的次序.

優先性(precendence)

When there is more than one operators in one executable code, which operator will be called in order of precedence.

當某片段的執行碼具有多個運算子時,那個先執行取決於優先性(precendence)

1
2
var a = 3 + 4 * 5;
console.log(a); // 23

從以下圖表可以檢視優先性:

由於 * 運算子的優先性大於 + 運算子,所以 Javacript 會優先執行 4 * 5 爾後執行 20 + 3
等號的優先性只有 2,所以會最後執行 a = 23

相依性(Associativity)

The Associativity is the percedence that determines the operators being called from left to right,
or right to left when the percedence are all the same.

當某片段程式碼中所有的運算子優先性相同時,由相依性來決定執行次序為左相依性還是右相依性:
左相依性(Left Associativity)表示由左到右執行;右相依性(Right Associativity)表示由右到左執行。

1
2
3
4
5
var a = 2, b = 3, c = 4;
a = b = c;
console.log(a); // 4
console.log(b); // 4
console.log(c); // 4

從上圖可以了解到 = 運算子的相依性是右相依性(right to left, Right Associativity),
當運算子的優先性都相同時 Javacript 會優先執行右邊的運算子,然後向左一個一個執行。
a = b = c; 表達式會先執行 b = 4,並且回傳 4 之後執行 a = 4

大括號(parentheses)最優先

當一個表達式中具有多個運算子,大括號(parentheses)裡的運算會最優先:

1
2
var a = (3 + 4) * 5;
console.log(a); // 35

&& || 優先性(precedence)比較

在判斷式中經常同時使用 &&(and)與 ||(or),需要特別注意 &&(and)優先級是大於 ||(or)的,
不過若專案中有使用到 eslint 則會提示盡量補上大括號(parentheses),來協助辨認次序唷!

克服 Javascript 的奇怪部分 動態型別 克服 Javascript 的奇怪部分 運算子

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×