JavaScript 布尔值

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

JavaScript 布尔值原生类型

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

let isPending = false;
let isDone = true;Code language: JavaScript (javascript)

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

console.log(typeof(isPending)); //  boolean
console.log(typeof(isDone)); // booleanCode language: JavaScript (javascript)

JavaScript Boolean 对象

除了 boolean 原生类型之外,JavaScript 还提供了全局 Boolean() 函数(其中字母 B 大写),用于将其他类型的数值转换为 boolean

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

let a = Boolean('Hi');
console.log(a); // true
console.log(typeof(a)); // booleanCode language: JavaScript (javascript)

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

let b = new Boolean(false);Code language: JavaScript (javascript)

要获取原始值,您可以调用 Boolean 对象的 valueOf() 方法,如下所示

console.log(b.valueOf()); // falseCode language: JavaScript (javascript)

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

console.log(b.toString()); // "false"Code language: JavaScript (javascript)

JavaScript 布尔值与 Boolean

考虑这个例子

let completed = true;
let active = new Boolean(false);Code language: JavaScript (javascript)

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

active.primitiveValue = active.valueOf();
console.log(active.primitiveValue); // falseCode language: JavaScript (javascript)

但是,您不能对像 completed 变量这样的原生布尔变量执行此操作

completed.name = 'primitive';
console.log(completed.name); // undefinedCode language: JavaScript (javascript)

其次,typeofBoolean 对象返回 object,而 typeof 的原生布尔值返回 boolean

console.log(typeof completed); // boolean
console.log(typeof active); // objectCode language: JavaScript (javascript)

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

console.log(completed instanceof Boolean); // false
console.log(active instanceof Boolean); // trueCode language: JavaScript (javascript)

最佳实践是永远不要使用 Boolean 对象,因为它会造成很大混淆,特别是在表达式中使用时。例如

let falseObj = new Boolean(false);
if (falseObj) {
    console.log('weird part of the Boolean object');
}Code language: JavaScript (javascript)

脚本的工作原理。

  • 首先,创建 falseObj 作为 false 值的 Boolean 对象包装器。
  • 其次,在 if 语句中使用 falseObj。因为 falseObj 是一个对象,而 JavaScript 引擎会将其强制转换为布尔值 true。因此,if 块中的语句将被执行。

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

运算符布尔值Boolean
 typeof布尔值object
 instanceof Booleanfalsetrue

建议您使用 Boolean() 函数将不同类型的数值转换为布尔类型,但您永远不应使用 Boolean 作为原生布尔值的包装对象。

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

本教程是否有帮助?