布尔值
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
作为函数,或使用 双非 运算符。不要将 Boolean()
构造函数与 new
一起使用。
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
。 - 符号 转换为
true
。 - 所有对象都变成
true
。
注意:一个遗留行为使 document.all
在用作布尔值时返回 false
,尽管它是一个对象。此属性是遗留的,并且是非标准的,不应使用。
注意:与其他类型转换(如 字符串强制转换 或 数字强制转换)不同,布尔值强制转换不会尝试通过调用用户方法来 将对象转换为基本类型。
换句话说,只有少数几个值会被强制转换为 false
——这些值被称为 假值。所有其他值都称为 真值。一个值在逻辑运算符、条件语句或任何布尔上下文中使用时的真值非常重要。
在 JavaScript 中,有两种方法可以达到相同的效果。
请注意,真值与 松散相等 于 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()
-
返回一个字符串,该字符串根据对象的 value 为
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 语言规范 # sec-boolean-objects |
浏览器兼容性
BCD 表格仅在浏览器中加载