JavaScript中只有false、0、-0、""、null、undefined、NaN这7个值为falsy,其余均为truthy;逻辑运算符||和&&返回操作数原值,!才返回布尔值;显式转布尔推荐Boolean()或!!。

JavaScript 的 Boolean 类型在逻辑判断中真正起作用的,不是 true 和 false 这两个值本身,而是整套“真值(truthy)”与“假值(falsy)”的隐式转换规则。理解这套规则,才能写出稳定、可预期的条件逻辑。
只有 6 个值会被当作 false
在 if、while、三元运算符、&&/|| 等布尔上下文中,JS 只把以下 6 个值判定为 falsy:
-
false(布尔字面量) -
0、-0(数字零,但0n是 truthy) -
""(空字符串;注意:" "含空格,是 truthy) nullundefinedNaN
除此之外,所有其他值——无论看起来多“空”——都是 truthy。
常见易错的 truthy 值
这些值常被误认为是 false,但在逻辑判断中一律为 true:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
-
[](空数组)、{}(空对象)、function(){}(空函数)——所有对象都是 truthy -
"0"、"false"、" "、"null"—— 非空字符串全为 truthy -
new Boolean(false)—— 是对象,所以是 truthy(⚠️不要用构造函数创建) -
42、Infinity、-1、0.0001—— 所有非零数字都是 truthy
逻辑运算符返回的是值,不是布尔
&& 和 || 不会强制返回 true 或 false,而是返回参与运算的某个操作数的原始值:
-
a || b:返回第一个 truthy 值;都 falsy 则返回最后一个(例如:0 || "" || null→null) -
a && b:返回第一个 falsy 值;都 truthy 则返回最后一个(例如:"hello" && 42→42) -
!是唯一始终返回布尔值的运算符(![]→false,!![]→true)
显式转布尔该怎么做
当确实需要 true 或 false 时,推荐两种写法:
-
Boolean(value):语义清晰,可读性好 -
!!value:简洁常用,效果等价(!!"abc"→true) - 避免
value === true或value == true:它们只匹配布尔true,会漏掉"yes"、[1]等常见 truthy 场景

















