使用 new boolean() 创建的布尔对象在条件判断中恒为真,因其本质是对象而非原始布尔值,导致逻辑错误;应仅用 boolean() 函数进行显式类型转换。

直接用 new Boolean() 创建布尔对象,表面看是“造了个 false”,实际在条件判断里永远为真——这是最隐蔽也最危险的坑。
包装对象本身恒为真值
只要用了 new,创建的就是对象,而所有对象(包括空数组、空对象)在 JavaScript 中都是真值。哪怕你传入 false:
-
new Boolean(false)是一个对象,类型为"object" -
if (new Boolean(false)) { ... }里面的代码一定会执行 -
Boolean(false) && true得false,但new Boolean(false) && true得true
与原始布尔值不等价
包装对象和原始布尔值不能靠 === 判断相等,因为类型不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
new Boolean(true) === true→ false(对象 ≠ 原始值) -
new Boolean(true) == true→ true(但依赖隐式转换,不可靠) -
typeof new Boolean(true)→"object",不是"boolean"
误用于逻辑运算或条件分支
一旦把 new Boolean(...) 赋给变量并用于 if、&&、|| 或三元表达式,行为就完全脱离预期:
- 后端返回
{ enabled: new Boolean("false") },前端写if (data.enabled) { openFeature() }→ 功能被错误开启 - 测试时用
console.log(new Boolean(false))看起来像false,但打印的是对象结构,不是运行时求值结果 - 单元测试可能通过,因为断言写的是
.toBe(true)或.toBeTruthy(),掩盖了类型问题
正确做法:只用 Boolean() 函数做显式转换
需要转布尔值时,务必省略 new:
-
Boolean("0")→true(字符串非空即真,这是另一类坑,但至少类型正确) -
Boolean(0)→false,Boolean("")→false,语义清晰 - 业务判断优先用明确语义的比较,比如
status === "1"或value != null && value !== ""
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










