在 JavaScript 中,truthy(真值)指的是在布爾值上下文中,轉換後的值爲真的值。所有值都是真值,除非它們被定義爲 假值(即除 false
、0
、""
、null
、undefined
和 NaN
以外皆爲真值)。
JavaScript 在布爾值上下文中使用強制類型轉換(coercion)。
JavaScript 中的真值示例如下(將被轉換爲 true,if
後的代碼段將被執行):
if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
falsy 值 (虛值) 是在 Boolean 上下文中認定爲 false 的值。
JavaScript 在需要用到布爾類型值的上下文中使用強制類型轉換(Type Conversion )將值轉換爲布爾值,例如條件語句和循環語句。
在 JavaScript 中只有 6 個 falsy 值。
這意味着當 JavaScript 期望一個布爾值,並被給與下面值中的一個時,它總是會被當做 false。
false |
false 關鍵字 |
0 | 數值 zero
當 BigInt 作爲布爾值使用時, 遵從其作爲數值的規則. |
"", '', `` |
這是一個空字符串 (字符串的長度爲零). JavaScript 中的字符串可用雙引號 |
null | null - 缺少值 |
undefined | undefined - 原始值 |
NaN | NaN - 非數值 |
例子
JavaScript 中 falsy 值的例子 (在布爾值上下文中被轉換爲 false,從而繞過了 if
代碼塊):
if (false)
if (null)
if (undefined)
if (0)
if (0n)
if (NaN)
if ('')
if ("")
if (``)
if (document.all)
邏輯與操作符 &&
如果第一個對象(譯註:原文如此)是 falsy 值,則返回那個對象:
let pet = false && "dog";
// ↪ false
document.all
在過去被用於瀏覽器檢測,是 HTML 規範在此定義了故意與 ECMAScript 標準相違背的(譯者注:document.all
雖然是一個對象,但其轉換爲 boolean 類型是 false),以保持與歷史代碼的兼容性 (if (document.all) { // Internet Explorer code here }
或使用 document.all
而不先檢查它的存在: document.all.foo
).
falsy 有時會寫作 falsey,雖然在英語中,將一個單詞轉換成形容詞時,通常會去掉末尾的字母 e,加上後綴 y。(noise => noisy, ice => icy, shine => shiny)