Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

JavaScript 布林值是什麼?用比較運算子產生 true 和 false

最後更新:2026年2月13日JavaScript

在前面的文章中,我們認識了數字和字串這兩種資料型態。

但在寫程式的時候,我們常常需要做「判斷」——使用者有沒有登入?購物車的金額有沒有超過免運門檻?密碼輸入的對不對?

這篇文章會介紹 JavaScript 的第三種資料型態:布林值(Boolean),以及如何用比較運算子來產生布林值。

JavaScript 布林值(Boolean)是什麼?

生活中有很多情況,答案只有兩種可能。

例如:「燈是開的還是關的?」、「你有沒有吃飯?」、「這個數字有沒有大於 10?」

這些問題的答案不是「是」就是「否」,不會有第三種可能。

JavaScript 針對這種情境,設計了一種專門的資料型態,叫做布林型態(Boolean)。

布林型態只有兩個值:true(真)和 false(假),就這樣,沒有其他的了。

你可能會覺得奇怪:既然只是「是或否」,為什麼不叫 YesNo 或 TrueFalse,要叫一個這麼不直覺的名字?

Boolean 這個名字,其實是來自一位數學家——喬治.布林(George Boole)。

他在 19 世紀建立了一套專門處理「真」和「假」的數學運算體系,後來被稱為「布林代數」。

這套體系的核心概念很簡單:所有東西都只有兩種狀態,不是 0 就是 1,不是真就是假。

這剛好和電腦的運作方式完美對應——電路的「開」與「關」,就是 1 和 0。

所以程式語言選擇用 Boolean 來命名,就像物理學用「牛頓」、「瓦特」來命名單位一樣,是為了致敬這位奠定基礎的人。

不需要記住這些歷史,只要知道:看到 Boolean,就是在講「只有 true 和 false 兩種值」的資料型態,這樣就夠了。

JavaScript 比較運算子如何產生布林值?

知道布林值是什麼之後,接下來的問題是:怎麼產生布林值?

最常見的方式就是用比較運算子。

> 和 < 這兩個符號你應該不陌生,在數學課上它們表示「大於」和「小於」,而且只用在數字上。

但在 JavaScript 裡,它們的用途更廣。

> 和 < 在 JavaScript 裡是二元運算子——放在兩個資料值之間,JavaScript 就會比較這兩個值,然後回傳一個布林值,告訴你比較結果是真還是假。

這裡說的「資料值」,不是只有數字。

還記得前面文章提到的嗎?42、"Hello"、true,這些在 JavaScript 裡都叫做資料值(Value)。

所以 > 和 < 不只能比較數字,也能比較字串。

不過,比較運算子會根據資料型態的不同,使用不同的比較方式。

比較數字和比較字串,背後的邏輯是不一樣的。

接下來會分開說明。

比較數字:用 >、<、>=、<=、==、!= 比較數值大小

當比較運算子的兩邊都是數字時,JavaScript 會直接比較數值本身的大小。

這跟你在數學課學到的完全一樣,很直覺:

console.log(3 > 2);
// → true

3 大於 2 嗎?是的,所以回傳 true。

console.log(3 < 2);
// → false

3 小於 2 嗎?不是,所以回傳 false。

除了 > 和 <,JavaScript 還有幾個常用的比較運算子:

  • >=:大於或等於
  • <=:小於或等於
  • ==:等於
  • !=:不等於
console.log(5 >= 5);
// → true

5 大於或等於 5 嗎?5 雖然沒有大於 5,但等於 5,所以回傳 true。

console.log(3 <= 2);
// → false

3 小於或等於 2 嗎?3 既不小於 2,也不等於 2,所以回傳 false。

這些用在數字上都很直覺,就是單純地比較數字的大小或是否相等。

比較字串:JavaScript 如何用 Unicode 編號比較字串大小?

當比較運算子的兩邊都是字串時,比較方式就不一樣了。

字串不是數字,沒辦法直接說誰大誰小。

那 JavaScript 是怎麼比的呢?

字串也是一種資料值(Value),而資料值是由位元組成,儲存在記憶體中。

但位元只能儲存 0 和 1,沒辦法直接儲存文字,所以 JavaScript 會用 Unicode(萬國碼) 幫每個字元分配一個數字編號,再把這些編號用位元儲存在記憶體中。

而比較字串大小的時候,JavaScript 比的就是這些 Unicode 編號。

JavaScript 字串排序規則:Unicode 編號的排列順序

具體來說,JavaScript 會從兩個字串的第一個字元開始,比較它們的 Unicode 編號。

如果第一個字元就能分出大小,就直接回傳結果;如果第一個字元一樣,就繼續比第二個,依此類推。

而 Unicode 的編號不是隨機分配的,它有固定的排列順序,大致上是這樣排的:

標點符號 → 數字 → 大寫字母 → 小寫字母

也就是說,在這條排列順序中,越前面的字元編號越小,越後面的越大。

這會導致兩個和字典不一樣的結果:

第一,大寫字母永遠排在小寫字母前面。

因為大寫字母的編號比小寫字母小,所以 "Z" 反而會比 "a" 還要「小」。

第二,標點符號排在所有字母前面。

像 !、- 這些符號的編號比字母還小,所以它們也會被排在字母前面。

用 > 和 < 比較字串的 Unicode 編號大小

來看一個例子:

console.log("Aardvark" < "Zoroaster");
// → true

JavaScript 先比較兩個字串的第一個字元:"Aardvark" 的第一個字元是 A,"Zoroaster" 的第一個字元是 Z。

A 排在 Z 前面,第一個字元就能分出大小,所以 JavaScript 直接判定 "Aardvark" 比 "Zoroaster" 「小」,回傳 true。

再看一個例子:

console.log("Apple" < "apple");
// → true

在字典裡,a 和 A 會被當成同一個字母,排在一起。

但在 JavaScript 裡,因為大寫字母的 Unicode 編號比小寫字母小,所以 "Apple" 會比 "apple" 還要「小」,即使它們看起來是同一個字。

用 == 和 != 比較字串內容是否相等

那 == 和 != 用在字串上呢?

它們的比較方式跟 > 和 < 不太一樣。

> 和 < 是比大小,所以會從第一個字元開始逐字比較 Unicode 編號。

但 == 和 != 是比「相不相等」,JavaScript 會檢查兩個字串的每一個字元是否完全一樣,只要有任何一個字元不同,就算不相等。

console.log("Itchy" != "Scratchy");
// → true

"Itchy" 和 "Scratchy" 每個字元都不一樣,所以 !=(不等於)回傳 true。

console.log("Apple" == "Orange");
// → false

"Apple" 和 "Orange" 的內容不一樣,所以 ==(等於)回傳 false。

為什麼 NaN 不等於 NaN?JavaScript 中唯一不等於自己的值

前面提到,當比較運算子的兩邊都是數字時,JavaScript 會直接比較數值本身的大小。

而在前面的文章中,我們介紹過 NaN——它的資料型態是數字,但它代表的是「算不出一個有意義的數字」。

例如 0 / 0 或 "hello" * 3,這些運算沒有合理的答案,JavaScript 就會回傳 NaN。

既然 NaN 的型態是數字,那用 == 比較時,照理說應該會比較數值本身才對。

但問題是:NaN 根本沒有一個「實際的數值」可以拿來比。

它只是一個標記,告訴你「這次計算失敗了」。

那當你用 == 去比較兩個 NaN 時,JavaScript 想比較數值本身,卻發現兩邊都沒有實際的數值可以比——這時候它該回傳什麼?

console.log(NaN == NaN);
// → false

結果是 false——NaN 竟然不等於自己。

這是因為每一次「沒有意義的計算」,背後的原因可能都不同。

來看兩個例子:

console.log(0 / 0);
// → NaN

console.log("hello" * 3);
// → NaN

0 / 0 得到 NaN,因為零除以零在數學上沒有定義。

"hello" * 3 也得到 NaN,因為文字根本不能拿來做乘法。

兩個運算都失敗了,但失敗的原因完全不一樣。

它們唯一的共同點,就是 JavaScript 都用 NaN 這個標記來表示「算不出結果」。

所以當你用 == 比較兩個 NaN 時,JavaScript 面對的情況是:兩邊都只是「計算失敗」的標記,背後可能是完全不同的運算,它沒辦法光看兩個標記就判斷它們「相等」。

因此 JavaScript 的設計是:既然 NaN 沒有實際的數值,那就一律回傳 false,連自己跟自己比也不例外。

小結

  • 布林值(Boolean) 只有兩個值:true 和 false,用來表示「是或否」。
  • 比較運算子(>、<、>=、<=、==、!=)會比較兩個值,然後回傳布林值。
  • 比較運算子會根據資料型態使用不同的比較方式:數字比的是數值大小,字串比的是 Unicode 編號。
  • NaN 是唯一一個不等於自己的值,因為它代表的是無意義的計算結果。
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

JavaScript

目錄

  • JavaScript 布林值(Boolean)是什麼?
  • JavaScript 比較運算子如何產生布林值?
  • 比較數字:用 >、<、>=、<=、==、!= 比較數值大小
  • 比較字串:JavaScript 如何用 Unicode 編號比較字串大小?
  • JavaScript 字串排序規則:Unicode 編號的排列順序
  • 用 > 和 < 比較字串的 Unicode 編號大小
  • 用 == 和 != 比較字串內容是否相等
  • 為什麼 NaN 不等於 NaN?JavaScript 中唯一不等於自己的值
  • 小結