【JavaScript 教程】第二章基础知识05—JavaScript 布尔值_运算符

英文 | https://www.javascripttutorial.net/

译文 | 杨小爱

在上节中,我们学习了JavaScript Number,错过的小伙伴可以点击文章《​​【JavaScript 教程】第二章基础知识04—JavaScript  Number​​》进行学习。

那么,在今天的教程中,我们将一起来学习了解 JavaScript 布尔对象以及布尔对象与布尔基本类型之间的区别。

JavaScript 布尔原始类型

JavaScript 提供了一个布尔基元类型,它有两个值 true 和 false。以下示例声明了两个保存布尔值 false 和 true 的变量:

let isPending = false;
let isDone = true;

代码语言:JavaScript ( javascript )

当您将 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 之间的差异:

【JavaScript 教程】第二章基础知识05—JavaScript 布尔值_javascript_02

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

在本教程中,您了解了 JavaScript 布尔对象以及布尔对象和布尔基本类型之间的区别。

【JavaScript 教程】第二章基础知识05—JavaScript 布尔值_javascript_03