iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

複習 JavaScript 核心概念系列 第 17

[Day 17] JavaScript 中的邏輯運算子(&& || ?? !)

  • 分享至 

  • xImage
  •  

昨天講完 Truthy(真值) 和 Falsy(假值)的概念後,接著要來談談 JavaScript 中 邏輯運算子(Logical Operators)。邏輯運算子是拿來執行邏輯相關運算用的,主要的運算子包括 &&(邏輯 AND)||(邏輯 OR)??(空值合併運算子)!(邏輯 NOT)。這些運算子在條件判斷中有非常重要的作用,其中還牽涉到 短路解析 的概念。在這篇文章中將深入介紹這些邏輯運算子,那我們開始吧。


邏輯 AND 運算子「&&」

&& 運算子會在左側的值為 Falsy 的情況下回傳左側的值,否則回傳右側的值。
這個運算子在條件判斷中通常用於確保所有條件都滿足的情況

let a = 5;
let b = 7;

console.log(a && b); // 輸出 7,因為左側的值為真值,故 `&&` 回傳右側的值
let x = 5;
let y = 7;

console.log(x>10 && y); // 輸出 false,因為左側的值為假值,故 `&&` 回傳左側的值

邏輯 OR 運算子「||」

|| 運算子運算子會在左側的值為 Truthy 的情況下回傳左側的值,否則回傳右側的值。
這個運算子在條件判斷中通常用於確保至少有一個條件滿足的情況

let a = 5;
let b = 7;

console.log(a || b); // 輸出 5,因為左側的值為真值,故 `||` 回傳左側的值
let x = 5;
let y = 7;

console.log(x>10 || y); // 輸出 7,因為左側的值為假值,故 `||` 回傳右側的值

空值合併運算子「??」

?? 運算子是在 ES11 引入的,
它只會在左側的值為 nullundefined 的情況下回傳右側的值,否則回傳左側的值。
這個運算子通常用於要處理的值可能為空值的情況

let myScore;
let defaultScore = 50;

// 輸出 50,因為左側的值為 undefined,故 `??` 回傳右側的值
console.log(myScore ?? defaultScore);
let myScore = 87;
let defaultScore = 50;

// 輸出 87,因為左側的值不是 null 或 undefined,故 `??` 回傳左側的值
console.log(myScore ?? defaultScore); 

邏輯 NOT 運算子「!」

! 運算子用於反轉一個值的真假。
如果值為 Truthy 的情況下則回傳 false,反之為 Falsy 則回傳 true。
透過這個運算子回傳的結果一定是布林值

let a = -99;
let b = 0;

console.log(!a); // 輸出 false
console.log(!b); // 輸出 true

關於「短路解析」

短路解析,或稱 短路運算 等等,是一種程式中的運算行為,通常發生在邏輯運算中。
邏輯運算式是由左向右解析的,如果左側的運算元已經確定了整個運算式的結果,則不會再執行右側的運算元,這種情況被稱為「短路」。剩餘部分的運算式並沒有被解析,因此不會占用任何效能。

function myFn() {
    console.log('Hello~');
    return true;
}

// 由於 && 的左側為假值,故已確定會回傳左側的值,因此不會再執行右側的 myFn()
const result = false && myFn();

總結

透過深入了解這些邏輯運算子(&&||??!)及 短路解析 的特性,可以更有效地處理條件判斷、空值處理和邏輯運算等等,確保我們的程式碼在各種情況下都能更簡潔且正確地運作。那麼今天就到這邊,我們下次見~


上一篇
[Day 16] Truthy 和 Falsy
下一篇
[Day 18] 物件(Objects)的基本架構
系列文
複習 JavaScript 核心概念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言