JavaScript中只有8个falsy值:false、0、-0、0n、""、null、undefined、NaN和document.all;其余所有值均为truthy,逻辑运算符&&和||基于此规则返回操作数本身,!!可将任意值转为对应布尔值。

JavaScript 在逻辑判断中判定真假值,靠的是一套固定的隐式布尔转换规则——不是看变量“有没有内容”,而是看它是否属于那几个明确的 falsy 值。只要不属于,一律当 truthy 处理。
哪些值会被当成 false?
只有以下 8 个值在 if、&&、||、三元运算等布尔上下文中会被转为 false:
- false(布尔假本身)
- 0、-0、0n(数字零及 BigInt 零)
- ""(空字符串,包括 '' 和 ``)
- null
- undefined
- NaN
- document.all(仅浏览器环境,历史遗留特殊对象)
注意:"0"、"false"、[]、{}、function(){}、Infinity 全部是 truthy,哪怕看起来“空”或“假”。
if 判断实际在做什么?
写 if (value) { ... } 时,引擎内部等价于执行 if (Boolean(value)) { ... }。它不关心 value 是什么类型,只按规则把它“映射”成 true 或 false:
立即学习“Java免费学习笔记(深入)”;
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
-
if ([])→Boolean([])是 true,所以会进 if 分支 -
if ("0")→Boolean("0")是 true,不会被当作空 -
if (0)→Boolean(0)是 false,直接跳过
&& 和 || 不返回布尔值,但依赖真假判断
这两个操作符本身返回的是操作数的原始值,但它们的执行逻辑完全基于真假值判定:
-
a || b:从左到右,返回第一个 truthy 值;全 falsy 就返回最后一个 -
a && b:从左到右,返回第一个 falsy 值;全 truthy 就返回最后一个
例如:0 || "hello" 返回 "hello"(因为 0 是 falsy);[] && "ok" 返回 "ok"(因为 [] 是 truthy,继续看右边)。
想得到真正的 true/false?用 !!
如果需要把任意值稳定转成布尔类型,!!value 是最简洁可靠的方式:
-
!![]→ true -
!!""→ false -
!!null→ false -
!!"0"→ true
它等价于 Boolean(value),但写法更轻量,也避免了误以为 if (arr) 能判断数组是否为空这类常见误解。

















