javascript 中 if 语句的条件表达式求值遵循“先计算表达式,再转换为布尔值”的规则。具体做法是引擎会执行括号内的代码得到结果,然后调用内部抽象操作 toboolean 将其转为 true 或 false。如果结果为真值(truthy),则执行 if 块;否则执行 else 块。需要注意的是,像 0、空字符串、null、undefined 和 nan 等 falsy 值会被转为 false。

哪些常见值会被转为 false
在 JavaScript 中,有六个特定的值在布尔上下文中会被强制转换为 false,它们被称为 falsy 值。除了前面提到的 0、""、null、undefined 和 NaN 外,还包括布尔值 false 本身。理解这些值对于编写健壮的判断逻辑至关重要,因为任何非 falsy 的值(即 truthy 值)都会被当作 true 处理。

console.log(Boolean(0)); // false
console.log(Boolean(-0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(false)); // false
console.log(Boolean("")); // false
console.log(Boolean({})); // true
console.log(Boolean([])); // true
对象和数组为什么是 true
很多开发者误以为空数组 [] 或空对象 {} 是 falsy 的,但实际上它们在 if 条件中都是 true。这是因为 JavaScript 的 ToBoolean 规则规定:所有对象(包括数组、函数、正则表达式等)都是 truthy 的,无论它们是否为空。只有原始类型(Primitive Types)才会根据特定规则被转换为 false。这一特性常用于检查变量是否被定义(通过检查 undefined/null),而不是检查对象是否为空。

if ([]) {
console.log("数组是 truthy");
}
if ({}) {
console.log("对象是 truthy");
}
if (new Boolean(false)) {
console.log("Boolean 对象也是 truthy");
}
基于程序中某个输入、条件或结果的具体问题
当我们在代码中使用 if (!variable) 时,实际上是在检查 variable 是否为 falsy。这会导致一个常见的陷阱:如果 variable 是 0 或空字符串 "",条件也会成立。例如,在一个表单验证场景中,如果用户输入了 0,!0 为 true,程序可能会错误地认为输入为空。因此,在需要严格区分“未定义/空值”与“零值/空字符串”时,应使用 === null || === undefined 或可选链操作符,而不是依赖隐式布尔转换。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











