iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Modern Web

JavaScript學習筆記系列 第 12

[Day 12] 運算式與運算子(下) - 優先性與相依性

  • 分享至 

  • xImage
  •  

為什麼要知道優先性?因為就像數學,我們都知道要「先乘除後加減」,在程式裡運算子也是有優先性的!但因為很多,MDN也很貼心整理好了~詳細請看完整表格

優先性 (Precedence)

JavaScript會先看運算子的優先性,假如優先性相同,就由相依性的方向執行。

範例:

let a = 1 + 2 * 3; // 執行順序? 

查英文MDN表格可以知道,乘號*優先性為12,加號+的優先性為11,等號=的優先性為2。
優先性

  1. 乘號*優先性比較高,所以先處理2 * 3,等於6
  2. 兩者相加1 + 6
  3. 最後才執行等號=,將結果賦值給a
console.log(a); //結果6

把剛剛的題目調整一下:

let a = (1 + 2) * 3 // 執行順序?

英文MDN表格小括號()優先性最高,所以()的先處理

  1. 1 + 2等於3
  2. 3 * 3為結果
  3. 執行等號=,將結果賦值給a
console.log(a); //結果9

再看一題比較運算與邏輯運算結合的:

let result = 5 > 3 && 4 < 2;
  1. 查表&&(AND)優先性為4,大於> 小於<的優先性為9
  2. 5 > 3 結果為true4 < 2結果為false
  3. 看為true && false,結果為false
  4. 執行等號=,將結果賦值給result
console.log(result); //false

根據以上所學的練習:

let result = 5 > 3 || 2 > 4 && 1 === 1; //?

以後看到這麼長就不覺得可怕了XD

相依性(Associativity)

用來決定運算的方向。依處理順序分成:

  • 從左到右:左相依性(Left-associativity)
  • 從右到左:右相依性(right-associativity)
    例如:加號+的相依性是由左到右,等號=是由右到左

剛剛的MDN表格也有完整版~

範例:

//左相依性
5 > 2
true && false

常看到的例子:

//右相依性
let a = 2;
let b = 4;
let c = 6;

a = b = c; //結果?

因為都是等號=,優先性一樣,則按等號=的相依性由右到左的方向執行。

執行步驟:

  1. b = c先執行,c先賦值給b,此時b = 6
  2. 接著執行a = bb的值(6)賦值給a,則a = 6
  3. abc三個值結果都為6
console.log(a,b,c); //6 6 6

以上分享~謝謝!

參考資料

MDN - Expressions and operators
MDN - 運算子優先序
重新認識 JavaScript: Day 06 運算式與運算子
JavaScript 概念三明治 - CH02:JavaScript基礎介紹


上一篇
[Day 11] 運算式與運算子(上) - 介紹
下一篇
[Day 13] Hoisting 提升
系列文
JavaScript學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言