Skip to content

2026-06-01

/ 9 分鐘閱讀

/ Deep JavaScript Foundations v3

ToBoolean 抽象操作:falsy 清單與 truthy 的判斷邏輯

本文是抽象操作系列的最後一篇,涵蓋 ToPrimitivetoStringToNumberToBoolean 這四個核心操作中的最後一個。與前三個相比,ToBoolean 的機制最為單純,但它有一個容易讓人犯錯的關鍵特性。

ToBoolean 不是演算法,是查表

每當一個非 boolean 的值出現在需要 boolean 的地方(例如 if 條件、&&||! 等),ToBoolean 就會被觸發。

ToNumbertoString 不同,ToBoolean 不執行任何轉換演算法,也不呼叫 ToPrimitivevalueOf()toString()。它只做一件事:查表

規格書中定義了一份固定的 falsy 清單。ToBoolean 的唯一邏輯是:

  • 值在清單上 → 回傳 false
  • 值不在清單上 → 回傳 true

Falsy 清單(完整且固定)

以下是 JavaScript 中所有的 falsy 值,清單是封閉的,不可擴充:

Falsy 值
"" (空字串)
0
-0
null
NaN
false
undefined

不在這份清單上的任何值,一律是 truthy。

Truthy 值的例子

Truthy 的清單在理論上是無限的,只要不是上面七種,都是 truthy。常見例子:

Truthy 值
"foo"(任何非空字串)
23(任何非零數字)
{ a: 1 }(物件)
[1, 3](陣列)
true
function(){..}(函式)

最常見的誤解:空陣列是 truthy

javascript
Boolean([]); // true

[] 不在 falsy 清單上,因此是 truthy。ToBoolean 不會呼叫 toString() 把它轉成空字串再判斷,它只查表——查完發現 [] 不在清單裡,直接回傳 true

這是與 ToNumber 行為的重要區別:ToNumber([]) 會觸發一連串的轉換最終得到 0,但 ToBoolean([]) 完全不走那條路。

實用記憶法

只需記住 falsy 清單,其餘所有值都是 truthy:

空字串、0-0nullNaNfalseundefined——這七個是 falsy,其他全是 truthy。

小結

ToBoolean 是四個核心抽象操作中機制最簡單的一個:不做轉換,只查表。掌握 falsy 清單,並記住「查表,不轉換」這個核心特性,就能在所有涉及 boolean 判斷的場景中做出正確預測。

複習

JavaScript 中的 falsy 值有哪些?

空字串、0、-0、null、NaN、false 和 undefined。

空陣列強制轉型為 boolean 時會發生什麼?

它是 truthy(變成 true)。

ToBoolean 抽象操作是如何運作的?

它透過查表來判斷一個值是否在 falsy 清單上,不會觸發其他強制轉型演算法。

JavaScript 中 truthy 值的例子有哪些?

字串、數字、物件、陣列、true 和函式。

在 JavaScript 的 ToBoolean 操作中,如何判斷一個值是 truthy 還是 falsy?

檢查該值是否在 falsy 清單上;若不在清單上,該值就是 truthy。

小測驗

以下哪些值在 JavaScript 中被視為 falsy? 空字串、null、0、NaN、false、undefined
空陣列強制轉型為 Boolean 時會發生什麼? 變成 true
JavaScript 中 ToBoolean 操作是如何運作的? 透過簡單查表來判斷值是 truthy 還是 falsy
以下哪些被視為 truthy 值? 字串、數字、物件、陣列、true、函式

此文章是 FrontendMasters 上的 Deep JavaScript Foundations, v3 課程筆記

最後更新時間:

0 %
MIT Licensed | Copyright © 2025-present Wen-Hsiu's Blog
Photo by Federica Galli on Unsplash