Boolean
Boolean 值可以是以下兩種值之一:true 或 false,分別代表邏輯命題的真值。
描述
布林值通常由關係運算符、相等運算子和邏輯非 (!) 產生。它們也可以由表示條件的函式產生,例如 Array.isArray()。請注意,二元邏輯運算子,如 && 和 ||,會返回運算元的值,這些值可能是布林值,也可能不是。
布林值通常用於條件測試,例如 if...else 和 while 語句的條件,條件運算子 (? :),或者 Array.prototype.filter() 的謂詞返回值。
你很少需要顯式地將某個值轉換為布林值,因為 JavaScript 在布林上下文中會自動執行此操作,因此你可以根據其真值性將任何值用作布林值。你也可以在自己的程式碼中鼓勵使用 if (condition) 和 if (!condition),而不是 if (condition === true) 或 if (condition === false),以便利用這種約定。然而,確保表示條件的變數始終是布林值有助於闡明程式碼的意圖。
// 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() 建構函式。
const good = Boolean(expression);
const good2 = !!expression;
const bad = new Boolean(expression); // don't use this!
這是因為所有物件,包括其包裝值為 false 的 Boolean 物件,都是真值,並在條件語句等地方被評估為 true。(另請參閱下面的布林值轉換部分。)
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、-0和NaN轉換為false;其他數字轉換為true。0n轉換為false;其他BigInt 轉換為true。- 空字串
""轉換為false;其他字串轉換為true。 - Symbol 轉換為
true。 - 所有物件都變為
true。
注意: 歷史行為使 document.all 在用作布林值時返回 false,儘管它是一個物件。此屬性是歷史遺留且非標準的,不應使用。
換句話說,只有少數幾個值會被轉換為 false——這些值稱為假值。所有其他值都稱為真值。一個值的真值在與邏輯運算子、條件語句或任何布林上下文一起使用時很重要。
在 JavaScript 中有兩種方法可以達到相同的效果。
- 雙重非:
!!x對x進行兩次取反,從而使用與上述相同的演算法將x轉換為布林值。 Boolean()函式:Boolean(x)使用與上述相同的演算法來轉換x。
請注意,真值不等於鬆散相等於 true 或 false。
if ([]) {
console.log("[] is truthy");
}
if ([] == false) {
console.log("[] == false");
}
// [] is truthy
// [] == false
[] 是真值,但它也鬆散等於 false。它之所以是真值,是因為所有物件都是真值。但是,當與 false(一個原始值)進行比較時,[] 也會被轉換為原始值,透過Array.prototype.toString() 轉換為 ""。比較字串和布林值會導致兩者都被轉換為數字,它們都變為 0,因此 [] == false 為 true。總的來說,假值和 == false 在以下情況下有所不同:
NaN、undefined和null是假值,但不鬆散等於false。"0"(以及其他非""但被轉換為 0 的字串字面量)是真值,但鬆散等於false。- 物件始終是真值,但它們的原始表示形式可能鬆散等於
false。
真值更不可能鬆散等於 true。所有值要麼是真值,要麼是假值,但大多數值既不鬆散等於 true 也不鬆散等於 false。
建構函式
Boolean()-
建立
Boolean物件。當作為函式呼叫時,它返回布林型別的原始值。
例項屬性
這些屬性定義在 Boolean.prototype 上,並被所有 Boolean 例項共享。
Boolean.prototype.constructor-
建立例項物件的建構函式。對於
Boolean例項,初始值為Boolean建構函式。
例項方法
Boolean.prototype.toString()-
根據物件的值返回字串
true或false。覆蓋Object.prototype.toString()方法。 Boolean.prototype.valueOf()-
返回
Boolean物件的原始值。覆蓋Object.prototype.valueOf()方法。
示例
建立假值
const bNoParam = Boolean();
const bZero = Boolean(0);
const bNull = Boolean(null);
const bEmptyString = Boolean("");
const bfalse = Boolean(false);
建立真值
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 |
瀏覽器相容性
載入中…