在本教程中,您将了解 JavaScript  Boolean 对象以及 Boolean 对象与原始类型 boolean 之间的区别。

JavaScript Boolean 布尔原始类型

JavaScript 提供了一个 boolean 原始类型,它有两个值 truefalse。以下示例声明了两个变量 ,它们包含布尔值truefalse

let isPending = false; 
let isDone = true;

当您将  typeof 运算符应用于包含原始布尔值的变量时,您将获得 boolean 如下示例:

console.log(typeof(isPending)); //  boolean
console.log(typeof(isDone)); // boolean

JavaScript 布尔对象

除了 boolean 原始类型,JavaScript 还提供了全局 Boolean() 函数,字母 B 大写,将另一个类型的值转换为 boolean

以下示例显示如何使用 Boolean() 函数将字符串转换为布尔值。因为字符串不为空,所以它返回true

let a = Boolean('Hi'); 
console.log(a); // trueconsole.log(typeof(a)); // boolean

Boolean 也是 boolean 原始类型的包装对象。这意味着当您将 true 或者 false 传递给 Boolean 构造函数时,它将创建一个Boolean对象。例如:

let b = new Boolean(false);

要取回原始值,您可以按如下方式调用 Boolean 对象的valueOf()方法:

console.log(b.valueOf()); // false

但是,如果您调用 Boolean 对象的 toString() 方法,您将获得一个字符串值 "true""false"。例如:

console.log(b.toString()); // "false"

JavaScript boolean vs. Boolean

考虑这个例子:

let completed = true; 
let active = new Boolean(false);

首先,active 是一个对象,因此您可以向其添加属性:

active.primitiveValue = active.valueOf(); 

console.log(active.primitiveValue); // false

但是,您不能原始 boolean 变量来做到这一点,像下面这样使用 completed 变量:

completed.name = 'primitive'; 
console.log(completed.name); // undefined

其次,typeof Boolean 对象会返回  object,而 typeof 原始布尔值的返回 boolean

console.log(typeof completed); // boolean
console.log(typeof active); // object

第三,将  instanceof 运算符应用于 Boolean 对象时,它会返回 true。但是,如果您将 instanceof 运算符应用于布尔值,它会返回 false

console.log(completed instanceof Boolean); // false
console.log(active instanceof Boolean); // true

最好不要使用 Boolean 对象,因为它会造成很多混淆,尤其是在表达式中使用时。例如:

let falseObj = new Boolean(false);
if (falseObj) {
    console.log('奇怪的布尔对象');
}

看看代码是如何工作的。

  • 创建变量值 falseObj 使用 Boolean 对象构造函数并传递 false
  • if 声明中使用 falseObj。因为 falseObj 是一个对象,JavaScript 引擎将它强制转换为布尔值. 结果是 trueif 块内的语句被执行。

下表总结了 JavaScript Booleanboolean 之间的区别:

OperatorbooleanBoolean
 typeofbooleanobject
 instanceof Booleanfalsetrue

建议您使用 Boolean() 函数将不同类型的值转换为布尔类型,但切勿使用 Boolean 构造函数封装原始布尔值 boolean。

结论

在本教程中,您已了解 JavaScript  Boolean 对象以及 Boolean 对象与原始类型 boolean 之间的区别。