JavaScript中只有8个falsy值:false、0、-0、0n、""、null、undefined、NaN;其余所有值均为truthy,包括"0"、[]、{}等。

JavaScript 中利用隐式转换简化条件判断,核心是理解哪些值会被转为 false(即“falsy 值”),其余都为 “truthy”,从而省去显式比较,让代码更简洁。但必须清楚边界,避免误判。
哪些值是 falsy?直接用于 if 判断最安全
JS 中只有 6 个 falsy 值:false、0、-0、0n(BigInt 零)、""(空字符串)、null、undefined、NaN。它们在布尔上下文中自动转为 false,其他一切(包括 "0"、"false"、[]、{}、new Date()、function(){})都是 truthy。
- ✅ 安全用法:
if (str)判断字符串是否非空(排除"",但注意" "是 truthy) - ✅ 安全用法:
if (arr && arr.length)或更简写if (arr?.length),但if (arr)只防null/undefined,不保证是数组 - ⚠️ 警惕陷阱:
if (x == 0)和if (!x)行为不同 —— 后者会把""、false、NaN都判为真,前者只关心数值相等
用逻辑运算符替代三元或 if-else 的常见模式
&& 和 || 返回的是操作数本身(不是布尔值),配合隐式转换可写出紧凑表达式。
- 提供默认值:
const name = userName || "游客"—— 当userName是 falsy 时取后者(适合处理null/undefined/"") - 短路取有效值:
const id = obj?.user?.id && String(obj.user.id),比obj?.user?.id ?? ""更强调“存在且真值” - 条件执行(无返回):
loading && showLoading(),仅当loading为 truthy 时调用
需要显式判断的场景:别让隐式转换掩盖意图
隐式转换虽简,但可读性和健壮性可能受损。以下情况建议显式比较:
- 检查数字是否为 0:
if (count === 0),而不是if (!count)(否则count = ""或false也会进入分支) - 区分
null和undefined:if (value == null)(宽松等于)可同时捕获两者;if (value === undefined)则更精确 - 判断是否为空数组:
if (Array.isArray(arr) && arr.length === 0),不能只写if (!arr)或if (!arr.length)(后者对arr = []成立,但对arr = [0]也成立)
小技巧:用 Boolean() 或 !! 快速看一个值的布尔表现
调试时快速验证隐式转换结果:
-
!![]→true(空数组是 truthy) -
!!"0"→true(非空字符串,哪怕内容是 "0") -
Boolean({})→true,Boolean(new Boolean(false))→true(对象包装器永远 truthy)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











