javascript中只有false、0(含-0和0n)、""、null、undefined、nan这6个值为falsy,其余所有值均为truthy;推荐用!!value显式转换,避免使用==true或===true判断。

JavaScript中,布尔值的真假判断并不只看变量本身是不是true或false,而是有一套明确的“类型转换规则”——即在条件判断(如if、while)、逻辑运算(&&、||、!)等上下文中,非布尔值会按规则自动转为布尔值来参与运算。这套规则叫“falsy”和“truthy”。
哪些值是 falsy(自动转为 false)
JavaScript 中只有 6 个值会被当作 falsy,其余所有值都是 truthy。这 6 个值是:
-
false(布尔字面量) -
0(数字零,包括-0和0n(BigInt 零)) -
""(空字符串,注意:包含空格的字符串" "是 truthy) nullundefinedNaN
哪些值是 truthy(自动转为 true)
除了上面 6 个 falsy 值,其他所有值都视为 truthy,包括但不限于:
-
"0"、"false"、" "(任意非空字符串) -
[](空数组)、{}(空对象)、new Date()、/regex/(正则对象) -
function(){}(函数)、class C{}(类) -
42、-1、Infinity、0.0001 -
new Boolean(false)(包装对象,即使内容是 false,也是 truthy!)
显式转换布尔值的推荐写法
若需把任意值明确转成布尔类型,推荐使用双重非操作符:!!value。它比Boolean(value)更简洁,语义相同:
-
!!"hello"→true -
!![]→true -
!!0→false -
!!null→false
不建议用value == true或value === true来判断,因为前者有类型转换陷阱,后者会漏掉所有非布尔 truthy 值(比如"yes"不是true,但常被当作“真”来用)。
常见误区提醒
几个容易出错的地方要特别注意:
-
new Boolean(false)是对象,属于 truthy;而原始值false才是 falsy -
document.all是历史遗留的例外:它在某些浏览器中表现为 falsy,但不属于标准 falsy 值,不应依赖 -
0n(BigInt 零)是 falsy,但0n + 1n是 truthy;BigInt 和 Number 的 falsy 规则一致 - 自定义对象哪怕空,也总是 truthy:
!!{}→true,!![]→true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











