JavaScript Boolean 和 boolean 不同与区别
在本教程中,您将了解 JavaScript Boolean 对象以及 Boolean 对象与原始类型 boolean 之间的区别
在本教程中,您将了解 JavaScript Boolean 对象以及 Boolean 对象与原始类型 boolean 之间的区别。
JavaScript Boolean 布尔原始类型
JavaScript 提供了一个 boolean 原始类型,它有两个值 true
和 false
。以下示例声明了两个变量 ,它们包含布尔值true
和 false
。
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 引擎将它强制转换为布尔值. 结果是true
,if
块内的语句被执行。
下表总结了 JavaScript Boolean
和 boolean
之间的区别:
Operator | boolean | Boolean |
---|---|---|
typeof | boolean | object |
instanceof Boolean | false | true |
建议您使用 Boolean()
函数将不同类型的值转换为布尔类型,但切勿使用 Boolean
构造函数封装原始布尔值 boolean。
结论
在本教程中,您已了解 JavaScript Boolean 对象以及 Boolean 对象与原始类型 boolean 之间的区别。