iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 8
0

今天繼續來看運算子,昨天提到:運算子可以想成是一個函式,這個函式會將前後兩個參數,傳入對應的JS內建函式中,進行運算並回傳。

那是什麼決定運算子的執行順序呢?
這就看運算子的兩個特性,優先性相依性來決定。

優先性
表示哪一個運算子被優先運算,當同一行程式有不只一個運算子時,具高優先性的運算子會先計算,然後依序算到排序等級低的運算子。

原來運算子也有分社會階級

相依性
表示運算子被計算的順序,若是左到右計算的運算子就稱為左相依性,右到左則稱為右相依性。

若運算子的優先性都相同,那就是依據相依性來判斷順序,決定是左到右還是右到左運算。

來看看以下程式碼:

var a = 3 + 4 * 5;
console.log(a)

現在有+* 兩個運算子透過=賦值給a
JavaScript會先執行哪一個呢?
在JavaScript中,*運算子優先性比+還高(先乘除後加減),所以會等於23,輸出結果看看:

 
一般常見的運算子如+-*/(加減乘除)與物件的.運算子都是左相依性的。
那有沒有右相依性的運算子呢?

有的!
例如我們常用的=就是,在JS中一個=符號也是運算子,它並不是數學運算上的「等於」,它可以把右邊的東西賦值、指向(或傳址)給左邊的東西。

例如:

var Tony = "IronMan"

X 宣告變數Tony,它和字串IronMan相等。
O 宣告變數Tony,接著=運算子右邊的字串IronMan賦值給左邊變數Tony

所以=運算子是右相依性。
若是要判斷數學上的「等於」,左右兩邊是否是一樣的東西,在JS中就要用 ===== 來比。

拉回來,再看看以下程式碼:

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

結果會是多少?

為何都是4呢?

看到a = b = c;時,我們習慣從左邊看到右邊。
(先看a,再看 =,再看到b,再來看到 =,最後是c)

但是=運算子是右相依性的,實際上是右到左:
1.c先賦值給b
2.b再賦值給a

也就是說,執行時程式可以這樣想:

var a = 2, b = 3, c = 4;
b = c;
//此時b也是4了

a = b;
//此時a也是4了
console.log(a);
console.log(b);
console.log(c);

因此abc自然都是4囉!
 
 
 
小結
關於運算子的優先順序,我們可以參考MDN的運算子優先等級
裏頭有清楚列出JS對不同運算子的執行順序。

今天的筆記內容可以參照Udemy課程:JavaScript 全攻略:克服JS 的奇怪部分3-22、3-23


上一篇
Day07 型別與運算子
下一篇
Day09 強制型轉與比較運算子
系列文
JavaScript基礎二三事30

尚未有邦友留言

立即登入留言