優先性及相依性
優先性
優先序較高的運算子會成為優先序較低的運算子的運算元。例:乘除的符號優先性大於加減,所以會先乘除後加減。
相依性
相依性決定運算方向。例:加減乘除都是由左至右、等號則是由右至左。
而當優先性相同時依據相依性的運算方向執行。
加減乘除優先性
以 var a = 2 * 2 + 2 * 3;
為例子
因為 *(乘號)的優先性大於 +(加號),所以會先進行乘的動作,接著乘出來的數字就是 +(加號)的運算元,這也符合描述的優先性。
等號優先性
等號的相依性是由右至左,而且優先性其實不高。
1 | var a = 1; |
因為等號是由右至左,所以拆解出來會像下面這樣
1 | b = 3; // 3 |
但是這邊要注意的一點是,a 雖然是 3 沒有錯,但是它是取到 b 的值,所以 a 取到的是 b 的回傳結果。
接下來看到另外一個範例
1 | var b = {}; |
a 會回傳 1 的原因是因為所有表達式都會回傳值,如果沒有去接收它的話,它會立即釋放不會儲存,變成只是一個過程。(如下圖)
而 =
也是表達式,它的功能是將右側的值賦予至左側,居然它是表達式它就必須要回傳 值,而它回傳的值都是以右側來做表示的。
大於小於的優先性
1 | console.log(1 < 2 < 3); // true |