用 Boolean 构造函数创建的是包装对象而非原始布尔值,所有 Boolean 对象在布尔上下文中均为真值;应使用 Boolean(value) 或 !!value 获取原始布尔值,避免 new Boolean(value)。
用 Boolean 构造函数创建的是包装对象,不是原始布尔值。例如:
const b1 = new Boolean(true); // 创建 Boolean 对象const b2 = new Boolean(false); // 也是对象,不是 false 原始值
⚠️ 注意:这种写法不推荐用于逻辑判断,因为所有 Boolean 对象都是真值(即使包装的是 false):
if (new Boolean(false)) { console.log('这会执行!'); // ✅ 实际上会进入 if 分支}
原因是:任何对象(包括 new Boolean(false))在布尔上下文中都视为 true。
直接调用 Boolean() 不加 new,它会执行类型转换,返回原始布尔值:
立即学习“Java免费学习笔记(深入)”;
Boolean(0); // falseBoolean(""); // falseBoolean(null); // falseBoolean(undefined); // falseBoolean(NaN); // falseBoolean(1); // trueBoolean("hello"); // trueBoolean([]); // true(空数组也是 true)Boolean({}); // true
这是最常用、最安全的方式,等价于 !!value。
new Boolean()?几乎不需要。ECMAScript 规范明确建议避免使用 new Boolean(),因为:
容易引发意外的真值判断;
与原始布尔值行为不一致(比如 === 比较会失败):
new Boolean(true) === true; // falsenew Boolean(true) == true; // true(抽象相等,有类型转换)
增加内存开销(对象比原始值更重)。
Boolean(value) 或 !!value
new Boolean(value),除非你明确需要一个可扩展的布尔包装对象(极少见)new Boolean() 做条件判断依据不复杂但容易忽略。