JavaScript中仅6个值为falsy:false、0(±0)、''、null、undefined、NaN;其余均为truthy;推荐用!!或Boolean()显式转换,避免==比较陷阱,并结合?.和??提升安全性。

JavaScript 中判断变量真假性,核心不是看它“是不是布尔类型”,而是看它在布尔上下文中是否被当作 true 或 false。这依赖于 JS 内置的 真值(truthy) 和 假值(falsy) 规则,而运算符配合布尔转换技巧能帮你快速、安全、准确地校验。
掌握那 6 个唯一 falsy 值
只有以下 6 种值调用 Boolean() 或参与条件判断时会得到 false:
false-
0(包括+0和-0) -
''(空字符串,注意:' '、'0'、'false'都是 truthy) nullundefinedNaN
所有其他值——哪怕 {}、[]、new Date('invalid')、function(){}、0n——统统是 truthy。记牢这 6 个,就掌握了真假判断的底层依据。
用 !! 或 Boolean() 显式转布尔,避免隐式陷阱
直接写 if (val) 是隐式转换,简洁但不透明;需要明确知道“这个值转成布尔后到底是什么”,推荐显式转换:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
!!val:最轻量写法,语义清晰(“取反再取反”),性能好,适合条件分支或逻辑表达式中快速取布尔结果 -
Boolean(val):语义最直白,可读性强,适合调试、日志或需强调意图的场景 - 二者行为完全一致,
!!val === Boolean(val)恒为true
例如:!!'0' → true,Boolean([]) → true,!!null → false。
慎用 == true 或 == false 比较
这类写法极易引发意外结果,因为 == 会触发强制类型转换:
-
1 == true→true(true被转为1) -
2 == true→false(2 !== 1) -
'0' == false→true('0'→0,false→0) -
'false' == false→false('false'→NaN,NaN == 0为false)
正确做法是:用 === true 判断变量**是否严格等于布尔字面量 true**;若想判断“是否为真值”,就用 if (val) 或 !!val。
结合可选链与空值合并提升健壮性
对嵌套属性做真假校验时,直接访问可能报错。用现代运算符组合可一步到位:
-
obj?.user?.name:安全读取,遇null/undefined返回undefined(falsy) -
obj?.items?.length ?? 0 > 0:先安全取长度,再 fallback 为0,最后比较 -
!!(obj?.config?.enabled):安全访问 + 显式转布尔,兼顾存在性与启用状态
比层层 if (obj && obj.user && obj.user.name) 更简洁、更不易出错。

















