JavaScript中只有8个假值:false、0、-0、0n、""、null、undefined、NaN;其余所有值均为真值。该规则适用于if判断、逻辑运算等布尔上下文,由ToBoolean抽象操作定义。

在 JavaScript 中,if 条件本身就是一个表达式上下文,所以可以直接写布尔表达式,无需额外封装或转换。关键在于理解哪些值是“真值(truthy)”、哪些是“假值(falsy)”,以及如何用简洁的表达式替代冗长的显式比较。
用隐式布尔转换代替显式比较
很多情况下,不需要写 === true 或 != null,JavaScript 会自动做类型感知的真假判断:
-
// ✅ 简洁写法(推荐)
if (value) { ... }—— 自动过滤 falsy 值(null、undefined、0、''、false、NaN) -
// ❌ 冗余写法(不必要)
if (value === true) { ... }—— 只匹配字面量true,漏掉1、"hello"等 truthy 值 -
// ✅ 检查是否“有值且非空”
if (arr && arr.length) { ... }—— 先防undefined,再判长度
用逻辑运算符组合多个条件
不用嵌套 if,用 && 和 || 直接写出可读的复合条件:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
if (user && user.role === 'admin' && user.active) { ... }—— 所有条件都需满足,且带安全访问 -
if (status === 'pending' || status === 'processing') { ... }—— 多个取值之一成立即可 -
if (a != null && b != null) { ... }—— 明确排除null和undefined(比if (a && b)更严格)
用可选链和空值合并简化对象属性判断
ES2020+ 提供了更安全、更简洁的写法:
立即学习“Java免费学习笔记(深入)”;
-
if (obj?.items?.length > 0) { ... }—— 遇到undefined或null自动短路,不报错 -
if ((user?.permissions ?? []).includes('edit')) { ... }——??提供默认值,避免undefined.includes报错 -
if (settings?.theme === 'dark') { ... }—— 比settings && settings.theme === 'dark'更轻量
慎用隐式转换的边界情况
简化不等于盲目省略。以下情况建议显式判断:
- 需要区分
0和false:用if (num !== 0)而非if (num) - 检查是否为有效数字:用
Number.isFinite(num),而不是if (num)(因为Infinity是 truthy) - 确认变量已声明:
if (typeof myVar !== 'undefined'),避免 ReferenceError

















