為什麼要知道優先性?因為就像數學,我們都知道要「先乘除後加減」,在程式裡運算子也是有優先性的!但因為很多,MDN也很貼心整理好了~詳細請看完整表格
JavaScript會先看運算子的優先性,假如優先性相同,就由相依性的方向執行。
範例:
let a = 1 + 2 * 3; // 執行順序?
查英文MDN表格可以知道,乘號*
優先性為12,加號+
的優先性為11,等號=
的優先性為2。
*
優先性比較高,所以先處理2 * 3
,等於6
1 + 6
=
,將結果賦值給a
console.log(a); //結果6
把剛剛的題目調整一下:
let a = (1 + 2) * 3 // 執行順序?
英文MDN表格小括號()
優先性最高,所以()
的先處理
1 + 2
等於3
3 * 3
為結果=
,將結果賦值給a
console.log(a); //結果9
再看一題比較運算與邏輯運算結合的:
let result = 5 > 3 && 4 < 2;
&&(AND)
優先性為4
,大於>
小於<
的優先性為9
5 > 3
結果為true
,4 < 2
結果為false
true && false
,結果為false
=
,將結果賦值給result
console.log(result); //false
根據以上所學的練習:
let result = 5 > 3 || 2 > 4 && 1 === 1; //?
以後看到這麼長就不覺得可怕了XD
用來決定運算的方向。依處理順序分成:
+
的相依性是由左到右,等號=
是由右到左剛剛的MDN表格也有完整版~
範例:
//左相依性
5 > 2
true && false
常看到的例子:
//右相依性
let a = 2;
let b = 4;
let c = 6;
a = b = c; //結果?
因為都是等號=
,優先性一樣,則按等號=
的相依性由右到左的方向執行。
執行步驟:
b = c
先執行,c
先賦值給b
,此時b = 6
a = b
,b
的值(6)賦值給a
,則a = 6
a
、b
、c
三個值結果都為6
console.log(a,b,c); //6 6 6
以上分享~謝謝!
MDN - Expressions and operators
MDN - 運算子優先序
重新認識 JavaScript: Day 06 運算式與運算子
JavaScript 概念三明治 - CH02:JavaScript基礎介紹