Truthy(真值)與Falsy (假值)

在 JavaScript 中,truthy(真值)指的是在布爾值上下文中,轉換後的值爲真的值。所有值都是真值,除非它們被定義爲 假值(即除 false0""nullundefined 和 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 作爲布爾值使用時, 遵從其作爲數值的規則. 0n 是 falsy 值.

"", '', ``

這是一個空字符串 (字符串的長度爲零). 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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章