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

浏览器兼容性

另见