JavaScript中只有6个假值:undefined、null、0(±0)、NaN、""、false;其余均为真值,包括空数组、空对象、Symbol、BigInt(0n)及所有对象。

JavaScript中只有6个值是假值(falsy),其余所有值都是真值(truthy)。记住这6个,比背规则更可靠。
六大假值清单
以下值在布尔上下文中会被强制转为 false:
- undefined
- null
-
0(包括
+0和-0) - NaN
- ""(空字符串,不含空格、换行等任何字符)
-
false(仅字面量
false,不是字符串"false"或布尔对象new Boolean(false))
假值转换的底层逻辑
JavaScript 在 if、&&、||、三元运算符等需要布尔判断的场景中,会通过 ToBoolean 抽象操作隐式转换值。该操作不调用 .toString() 或 .valueOf(),而是直接查表映射 —— 上述6个值映射为 false,其余一律为 true。
注意:
- document.all 曾是历史遗留假值(HTML规范特例),但现代标准已移除,不应视为假值;
- new Boolean(false) 是对象,属于真值(所有对象都是真值);
- 空数组 []、空对象 {}、Symbol()、BigInt(0n) 全部为真值。
安全判断“空”或“无效”的常见误区
直接用 if (val) 只能检测是否为上述6个假值,不能等价于“是否为空数组”“是否为 null/undefined”或“是否有内容”。实际开发中应按需选择判断方式:
立即学习“Java免费学习笔记(深入)”;
- 检查是否为
null或undefined:用val == null(宽松相等)或val === null || val === undefined - 检查是否为空字符串或仅空白:用
val?.trim() === "" - 检查是否为空数组:用
Array.isArray(val) && val.length === 0 - 检查是否为空对象:用
val != null && typeof val === "object" && Object.keys(val).length === 0 - 想统一处理“无效值”(如后端返回
null、""、0都算缺省):需明确业务定义,手动枚举,不可依赖自动 falsy 转换
显式转换技巧与避坑提示
想把任意值转为布尔值,用 Boolean(val) 或双重非 !!val —— 二者等价,都触发 ToBoolean。
但要注意:
-
Boolean("0")→ true(非空字符串恒为真) -
Boolean([])→ true(空数组也是对象) -
Boolean({})→ true -
Boolean(new Number(0))→ true(包装对象恒为真) - 避免用
== false判断假值(如0 == false为true,但"" == false也为true,逻辑混乱且易出错)









