Boolean

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Boolean 值可以是以下兩種值之一:truefalse,分別代表邏輯命題的真值。

描述

布林值通常由關係運算符相等運算子邏輯非 (!) 產生。它們也可以由表示條件的函式產生,例如 Array.isArray()。請注意,二元邏輯運算子,如 &&||,會返回運算元的值,這些值可能是布林值,也可能不是。

布林值通常用於條件測試,例如 if...elsewhile 語句的條件,條件運算子 (? :),或者 Array.prototype.filter() 的謂詞返回值。

你很少需要顯式地將某個值轉換為布林值,因為 JavaScript 在布林上下文中會自動執行此操作,因此你可以根據其真值性將任何值用作布林值。你也可以在自己的程式碼中鼓勵使用 if (condition)if (!condition),而不是 if (condition === true)if (condition === false),以便利用這種約定。然而,確保表示條件的變數始終是布林值有助於闡明程式碼的意圖。

js
// Do this:
// This always returns a boolean value
const isObject = (obj) => !!obj && typeof obj === "object";

// Or this:
const isObject = (obj) => Boolean(obj) && typeof obj === "object";

// Or this:
const isObject = (obj) => obj !== null && typeof obj === "object";

// Instead of this:
// This may return falsy values that are not equal to false
const isObject = (obj) => obj && typeof obj === "object";

布林原始值和布林物件

要將非布林值轉換為布林值,請使用 Boolean 作為函式,或使用雙重非運算子。請勿使用 new 來呼叫 Boolean() 建構函式。

js
const good = Boolean(expression);
const good2 = !!expression;
js
const bad = new Boolean(expression); // don't use this!

這是因為所有物件,包括其包裝值為 falseBoolean 物件,都是真值,並在條件語句等地方被評估為 true。(另請參閱下面的布林值轉換部分。)

js
if (new Boolean(true)) {
  console.log("This log is printed.");
}

if (new Boolean(false)) {
  console.log("This log is ALSO printed.");
}

const myFalse = new Boolean(false); // myFalse is a Boolean object (not the primitive value false)
const g = Boolean(myFalse); // g is true
const myString = new String("Hello"); // myString is a String object
const s = Boolean(myString); // s is true

警告: 你應該很少需要使用 Boolean 作為建構函式。

布林強制轉換

許多期望布林值的內建操作會先將它們的引數轉換為布林值。此操作可以總結如下:

  • 布林值按原樣返回。
  • undefined 轉換為 false
  • null 轉換為 false
  • 0-0NaN 轉換為 false;其他數字轉換為 true
  • 0n 轉換為 false;其他BigInt 轉換為 true
  • 空字串 "" 轉換為 false;其他字串轉換為 true
  • Symbol 轉換為 true
  • 所有物件都變為 true

注意: 歷史行為使 document.all 在用作布林值時返回 false,儘管它是一個物件。此屬性是歷史遺留且非標準的,不應使用。

注意:字串轉換數字轉換等其他型別轉換不同,布林值轉換不會嘗試透過呼叫使用者方法來將物件轉換為原始值

換句話說,只有少數幾個值會被轉換為 false——這些值稱為假值。所有其他值都稱為真值。一個值的真值在與邏輯運算子、條件語句或任何布林上下文一起使用時很重要。

在 JavaScript 中有兩種方法可以達到相同的效果。

  • 雙重非!!xx 進行兩次取反,從而使用與上述相同的演算法將 x 轉換為布林值。
  • Boolean() 函式:Boolean(x) 使用與上述相同的演算法來轉換 x

請注意,真值不等於鬆散相等truefalse

js
if ([]) {
  console.log("[] is truthy");
}
if ([] == false) {
  console.log("[] == false");
}
// [] is truthy
// [] == false

[] 是真值,但它也鬆散等於 false。它之所以是真值,是因為所有物件都是真值。但是,當與 false(一個原始值)進行比較時,[] 也會被轉換為原始值,透過Array.prototype.toString() 轉換為 ""。比較字串和布林值會導致兩者都被轉換為數字,它們都變為 0,因此 [] == falsetrue。總的來說,假值和 == false 在以下情況下有所不同:

  • NaNundefinednull 是假值,但不鬆散等於 false
  • "0"(以及其他非 ""被轉換為 0 的字串字面量)是真值,但鬆散等於 false
  • 物件始終是真值,但它們的原始表示形式可能鬆散等於 false

真值更不可能鬆散等於 true。所有值要麼是真值,要麼是假值,但大多數值既不鬆散等於 true 也不鬆散等於 false

建構函式

Boolean()

建立 Boolean 物件。當作為函式呼叫時,它返回布林型別的原始值。

例項屬性

這些屬性定義在 Boolean.prototype 上,並被所有 Boolean 例項共享。

Boolean.prototype.constructor

建立例項物件的建構函式。對於 Boolean 例項,初始值為 Boolean 建構函式。

例項方法

Boolean.prototype.toString()

根據物件的值返回字串 truefalse。覆蓋 Object.prototype.toString() 方法。

Boolean.prototype.valueOf()

返回 Boolean 物件的原始值。覆蓋 Object.prototype.valueOf() 方法。

示例

建立假值

js
const bNoParam = Boolean();
const bZero = Boolean(0);
const bNull = Boolean(null);
const bEmptyString = Boolean("");
const bfalse = Boolean(false);

建立真值

js
const btrue = Boolean(true);
const btrueString = Boolean("true");
const bfalseString = Boolean("false");
const bSuLin = Boolean("Su Lin");
const bArrayProto = Boolean([]);
const bObjProto = Boolean({});

規範

規範
ECMAScript® 2026 語言規範
# sec-boolean-objects

瀏覽器相容性

另見