JavaScript 中的“六大假值”是 false、0、-0、0n、""、null、undefined(共七个),但传统说法将其中六个作为典型代表;NaN 也是假值,故实际有八个 falsy 值。

JavaScript 中的“六大假值”(Falsy values)其实只有 五个明确的原始值 加上 一个特殊行为值,常被简称为“六大假值”,但严格来说是:在布尔上下文中被自动转为 false 的六个特定值。它们不是“假”,而是“在条件判断中表现得像假”。理解它们的关键在于:这是 JavaScript 类型转换规则的一部分,而非逻辑意义上的“错误”或“空”。
六大假值具体是哪六个?
以下六个值在 if、while、三元运算符等需要布尔值的上下文中,会自动被当作 false 处理:
-
false— 唯一的布尔假值 -
0— 数字零(包括-0,但注意Object.is(-0, 0)为 true) -
-0— 虽然数学上等于 0,但作为独立值存在,也属于 falsy -
0n— BigInt 零(ES2020 引入,也是 falsy) -
""(空字符串)— 长度为 0 的字符串,不含空格 -
null和undefined— 它们常被一起提及,但注意:只有 null 和 undefined 是两个独立的 falsy 值;不过“六大”说法里通常把null、undefined各算一个,再加前面四个(false、0、""、0n),共六个
⚠️ 注意:NaN 是 falsy,但它不在“传统六大”之列——因为它是数字类型,且规范中明确 Boolean(NaN) === false,所以实际是第七个 falsy 值。但“六大”是历史习惯说法,源自早期 JS(ES5 之前)常强调的最常见 falsy 值:false、0、""、null、undefined、NaN。现代标准中,0n 和 -0 也加入,但教学仍多沿用“六大”指代最典型、最易踩坑的那几个。
怎么验证一个值是不是 falsy?
最直接的方法是用双重非操作符 !! 或 Boolean():
立即学习“Java免费学习笔记(深入)”;
console.log(!!false); // false<br>console.log(!!0); // false<br>console.log(!!""); // false<br>console.log(!!null); // false<br>console.log(!!undefined); // false<br>console.log(!!NaN); // false<br>console.log(!!0n); // false
✅ 小技巧:想快速罗列所有 falsy 值,可以这样写:
const falsyValues = [false, 0, -0, 0n, "", null, undefined, NaN];<br>falsyValues.forEach(v => console.log(`${v} →`, Boolean(v)));
常见误区和注意事项
容易混淆的点,恰恰是实际开发中最容易出 bug 的地方:
-
"0"、"false"、空格字符串" "都是 truthy —— 只要字符串有哪怕一个字符,就是真值 -
[](空数组)、{}(空对象)、function(){}全部是 truthy,哪怕看起来“什么都没有” -
document.all是历史遗留的伪数组对象,在非标准场景下曾表现为 falsy,但现代环境不应依赖它 - 不要用
==判断 falsy,比如if (x == false)会触发意外类型转换("0" == false居然为 true!),应改用显式检查:x === false || x === 0 || x === "" || x == null等,或更稳妥地用!x(但需清楚它涵盖全部 falsy)
什么时候该用 falsy 判断?什么时候不该?
✅ 推荐场景:
- 快速判空:如
if (str)检查字符串是否非空 - 提供默认值:
const name = userInput || "Anonymous"(注意:若 userInput 是0或false也会被覆盖)
❌ 不推荐场景:
- 想区分
0和null时,仅用if (val)会把两者都过滤掉 - 处理可能为
false的布尔配置项时(如enableFeature: false),if (config.enableFeature)会跳过,应改用config.enableFeature === false或typeof config.enableFeature !== 'undefined'
真正安全的默认值写法(ES2020+):const value = input ?? "default"(空值合并操作符,只对 null 和 undefined 生效)。


















