【JavaScript 教程】第二章基础知识05—JavaScript 布尔值
在上节中,我们学习了JavaScript Number,错过的小伙伴可以点击文章《【JavaScript 教程】第二章基础知识04—JavaScript Number》进行学习。
那么,在今天的教程中,我们将一起来学习了解 JavaScript 布尔对象以及布尔对象与布尔基本类型之间的区别。
JavaScript 布尔原始类型
JavaScript 提供了一个布尔基元类型,它有两个值 true 和 false。以下示例声明了两个保存布尔值 false 和 true 的变量:
let isPending = false;
let isDone = true;
当您将 typeof 运算符应用于保存原始布尔值的变量时,您将获得如下示例所示的布尔值:
console.log(typeof(isPending)); // boolean
console.log(typeof(isDone)); // boolean
JavaScript 布尔对象
除了 boolean 原始类型,JavaScript 还为您提供了全局 Boolean() 函数,其中字母 B 为大写,用于将另一种类型的值转换为 boolean。
以下示例显示如何使用 Boolean() 函数将字符串转换为布尔值。因为字符串不为空,所以它返回真。
let a = Boolean(‘Hi’);
console.log(a); // true
console.log(typeof(a)); // boolean
Boolean 也是 boolean 原始类型的包装对象。这意味着当您将 true 或 false 传递到 Boolean 构造函数时,它将创建一个 Boolean 对象。例如:
let b = new Boolean(false);
要取回原始值,请调用布尔对象的 valueOf() 方法,如下所示:
console.log(b.valueOf()); // false
但是,如果调用 Boolean 对象的 toString() 方法,则会得到字符串值“true”或“false”。例如:
console.log(b.toString()); // “false”
JavaScript 布尔值与布尔值
考虑这个例子:
let completed = true;
let active = new Boolean(false);
首先, active 是一个对象,因此您可以向 bar 对象添加一个属性:
active.primitiveValue = active.valueOf();
console.log(active.primitiveValue); // false
但是,您不能使用像完成的变量这样的原始布尔变量来做到这一点:
completed.name = ‘primitive’;
console.log(completed.name); // undefined
其次,布尔对象的 typeof 返回对象,而原始布尔值的 typeof 返回布尔值。
console.log(typeof completed); // boolean
console.log(typeof active); // object
第三,当将 instanceof 运算符应用于布尔对象时,它返回 true。但是,如果将 instanceof 运算符应用于布尔值,它会返回 false。
console.log(foo instanceof Boolean); // false
console.log(bar instanceof Boolean); // true
最好,不要使用 Boolean 对象,因为它会造成很多混淆,尤其是在表达式中使用时。例如:
let falseObj = new Boolean(false);
if (falseObj) {
console.log(‘weird part of the Boolean object’);
}
脚本如何工作?
首先,创建 falseObj 作为 false 值的布尔对象包装器。
其次,在 if 语句中使用 falseObj。因为 falseObj 是一个对象,JavaScript 引擎将它强制转换为布尔值 true。因此,执行 if 块内的语句。
下表总结了 JavaScript Boolean 和 boolean 之间的差异:

建议您使用 Boolean() 函数将不同类型的值转换为 Boolean 类型,但永远不要将 Boolean 用作原始布尔值的包装对象。
在本教程中,您了解了 JavaScript 布尔对象以及布尔对象和布尔基本类型之间的区别。