JavaScript中只有6个falsy值:false、0(含-0和0n)、""、null、undefined、NaN,其余均为truthy;它们在条件判断中被自动转为false,但需注意0与""语义不同、[]和{}为truthy、慎用==比较,推荐用??处理默认值。

JavaScript 中,条件判断(如 if、while、三元运算符等)会自动对操作数进行**真值(truthy)/假值(falsy)判断**,这个过程就依赖隐式转换。所谓“隐式转换为 false 的值”,就是指那些在布尔上下文中被自动当作 false 处理的值 —— 它们本身不是布尔类型,但 JS 引擎会在需要布尔值时把它们转成 false。
哪些值会被隐式转换为 false
JavaScript 中只有 **6 个 falsy 值**,其余所有值都是 truthy(包括空数组 []、空对象 {}、字符串 "false" 等):
-
false(布尔值 false) -
0(数字零,包括-0和0n(BigInt 零)) -
""(空字符串) nullundefinedNaN
在 if 语句中直接使用 falsy 值做判断
你不需要显式写 === false 或 == false,直接把变量放进去即可:
let userInput = "";
if (!userInput) {
console.log("输入为空"); // ✅ 触发:"" 是 falsy
}
let count = 0;
if (!count) {
console.log("计数为零"); // ✅ 触发:0 是 falsy
}
let data = null;
if (!data) {
console.log("数据不存在"); // ✅ 触发:null 是 falsy
}
注意:! 是逻辑非操作符,它会先将操作数转为布尔值再取反。所以 !"" → !false → true。
立即学习“Java免费学习笔记(深入)”;
常见误用与注意事项
隐式转换虽然方便,但也容易引发意外行为:
-
0 和 "" 都是 falsy,但含义不同:比如函数返回
0表示“查到第 0 项”,而""表示“没输入”,两者混用if (!value)可能掩盖业务逻辑差异。 -
空数组和空对象是 truthy:
if ([])和if ({})都为true,不能靠它们判断是否“为空”。应改用arr.length === 0或Object.keys(obj).length === 0。 -
避免用 == 比较 falsy 值:例如
0 == false是true,但"" == false也是true,这种宽松相等易出错;推荐用严格相等===或直接利用 falsy 特性。
安全地结合默认值与 falsy 判断
利用逻辑运算符可简洁处理默认值:
function greet(name) {
name = name || "游客"; // 如果 name 是 falsy,用 "游客"
return `你好,${name}!`;
}
greet(""); // "你好,游客!"
greet("小明"); // "你好,小明!"
ES6 后更推荐用空值合并操作符 ??,它只在 null 或 undefined 时生效,不会把 0、"" 当作“无效”:
const count = 0; const displayCount = count ?? 10; // 0 不是 null/undefined,所以 displayCount === 0 const name = undefined; const displayName = name ?? "匿名"; // "匿名"


















