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 |
浏览器兼容性
加载中…