在 JavaScript 开发中,使用 Boolean 构造函数创建布尔值时,许多开发者误以为会直接得到原始布尔值。实际上,new Boolean() 返回的是一个布尔包装对象,而非原始布尔值。下面通过两个典型示例帮助你理解:
const b1 = new Boolean(true); // 实际创建的是 Boolean 对象 const b2 = new Boolean(false); // 同样是对象,而非 false 原始值
这里有一个常见的 JavaScript 陷阱:所有 Boolean 对象在布尔上下文中都会被判定为真值,即使它包装的值是 false。例如下面这段代码,初学者很容易判断错误:
if (new Boolean(false)) {
console.log('这段代码会执行!'); // ✅ 实际上会进入 if 条件分支
}
原因其实很简单:在 JavaScript 条件判断中,任何对象(包括 new Boolean(false))都会被自动转换为 true。因此,使用 new Boolean() 进行逻辑判断,很容易引发预期之外的 Bug。

如何正确获取布尔值
推荐的做法是直接调用 Boolean() 函数,不要加 new 关键字。它会执行类型转换并返回原始布尔值,简洁高效:
Boolean(0); // 返回 false
Boolean(""); // 返回 false
Boolean(null); // 返回 false
Boolean(undefined); // 返回 false
Boolean(NaN); // 返回 false
Boolean(1); // 返回 true
Boolean("hello"); // 返回 true
Boolean([]); // 返回 true(空数组同样被视为 true)
Boolean({}); // 返回 true
这是最常见且最安全的转换方式,本质上与 !!value 的效果相同。如果你希望代码更简洁,!!value 也是不错的选择。
什么场景下需要使用 new Boolean()?
几乎不需要。ECMAScript 规范明确建议避免使用 new Boolean(),主要原因有三点:
- 容易引发意外的真值判断问题,例如上面提到的
if判断示例; - 与原始布尔值的行为不一致,尤其是在严格相等比较时会失败:
new Boolean(true) === true; // 返回 false new Boolean(true) == true; // 返回 true(抽象相等比较会触发类型转换)
- 增加不必要的内存开销——对象比原始值占用更多资源,通常没有使用必要。
总结建议
- ✅ 需要布尔值时 → 使用
Boolean(value)或!!value - ❌ 避免使用
new Boolean(value),除非你确实需要一个可扩展的布尔包装对象(这种情况极为罕见) - ⚠️ 不要将
new Boolean()作为条件判断的依据
逻辑并不复杂,但很容易被忽略——请记住,对象永远是对象,即使它包装的值是 false。
