javascript布尔类型直接参与条件判断,true执行分支、false跳过;原始布尔值(true/false)最安全;非布尔值会隐式转换为真值(truthy)或假值(falsy),其中false、0、-0、""、null、undefined、nan为falsy;禁用new boolean(),应使用boolean()或!!转换。

JavaScript 中布尔类型直接参与条件判断,核心在于它天然适配 if、while、for 等语句的真假判定逻辑——true 执行分支,false 跳过或走 else 分支。
原始布尔值最安全可靠
用 true 或 false 字面量声明的变量,类型是 "boolean",在条件中行为直观、无歧义:
-
let isLoggedIn = true;→if (isLoggedIn) { ... }会执行 -
let hasError = false;→if (!hasError) { ... }也会执行 - 它们不会被隐式转换干扰,是条件判断的“标准答案”
非布尔值会自动转为布尔(隐式转换)
JS 在条件语句中会对任意表达式做“真值(truthy)/假值(falsy)”判断。以下 6 个值明确为 falsy:
false-
0和-0 -
""(空字符串) nullundefinedNaN
其余所有值(包括 "false"、[]、{}、0n、new Date())都为 truthy。例如:
if ("false") console.log("这会打印"); // ✅ 因为字符串非空if ([]) console.log("这也打印"); // ✅ 空数组也是 truthyif (0) console.log("这不会打印"); // ❌ 0 是 falsy
千万别用 new Boolean() 做判断
用构造函数创建的 new Boolean(false) 是对象,类型为 "object",**在 if 中永远为 true**:
const b = new Boolean(false);if (b) { console.log("居然执行了!"); } // ✅ 输出!
这是极易踩坑的行为。如需转换,应使用:
-
Boolean(value)—— 返回原始布尔值 -
!!value—— 双非运算,效果等同 Boolean()
逻辑运算符本身也返回布尔上下文结果
&& 和 || 不只返回 true/false,而是返回**最后一个被求值的操作数**,但整个表达式仍用于布尔判断:
-
false || "hello"→ 返回"hello",在if中视为 truthy -
"world" && null→ 返回null,在if中视为 falsy - 所以
if (a && b)实质是:先看a是否 truthy,再看b是否 truthy











