JavaScript中假值仅有8个:undefined、null、false、0、-0、NaN、0n、"";其余如[]、{}、"0"等均为真值,需显式检查业务空值。

JavaScript 中的“假值”不是指“看起来像假”,而是有明确定义的 8 个固定值——它们在 if、&&、||、三元运算等布尔上下文中,会被自动转成 false。理解这组黑名单,是避开逻辑误判的第一步。
哪些值属于“假值黑名单”?
只有以下 8 个值是假值,其余一切(包括空数组 []、空对象 {}、字符串 "0"、字符串 "false"、new Boolean(false))统统为真值:
undefinednull-
false(布尔字面量本身) -
0和-0(数字零,含负零) NaN-
0n(BigInt 零,ES2020 起支持) -
""(空字符串,注意:仅限长度为 0,不含空格)
常见逻辑坑:你以为是“空”,其实不是“假”
很多开发者凭直觉认为“空数组”“空对象”“字符串 '0'”该进 if 的 else 分支,但实际它们全是真值,容易导致条件走错:
-
if ([]) { ... }→ 执行([]是对象,非假值) -
if ({}) { ... }→ 执行(同理) -
if ("0") { ... }→ 执行(非空字符串,哪怕内容是字符'0') -
if (new Date('invalid')) { ... }→ 执行(非法日期对象是Invalid Date,但仍是对象,真值)
如何安全地做“空值判定”?
别依赖隐式转换判断业务意义上的“空”。应按需显式检查:
- 判空数组:
Array.isArray(arr) && arr.length === 0 - 判空对象:
Object.keys(obj).length === 0 && obj.constructor === Object - 判有效数字字符串:
!isNaN(Number(str)) && str.trim() !== "" - 判非空且非空白字符串:
typeof str === "string" && str.trim().length > 0
警惕逻辑运算符里的隐式陷阱
&& 和 || 返回的是操作数本身,不是布尔值;但它们的“选择逻辑”基于假值规则:
-
0 || "default"→ 返回"default"(因为0是假值) -
"" || false || 42→ 返回42(前两个是假值,第三个是真值) -
[] && "yes"→ 返回"yes"([]是真值,继续执行右边) -
null ?? "fallback"→ 返回"fallback"(??只对null/undefined生效,比||更精准)











