JavaScript逻辑运算符&&和||的短路特性本质是“能定结果就停”,用于跳过不必要的执行;&&实现“有才执行”的安全操作,||设置默认值或fallback,二者组合可简化条件判断但需注意优先级与隐性bug。

JavaScript 中逻辑运算符 && 和 || 的短路特性,本质是“能定结果就停”,不是为了返回 true/false,而是为了跳过不必要的执行。用好它,能让条件判断更轻、更安全、更简洁。
用 && 实现“有才执行”的安全操作
当左侧为假值(如 null、undefined、0、''、false、NaN)时,&& 立刻返回它,右侧完全不运行——这天然适合做前置校验。
- 避免访问空对象属性:
user && user.profile && user.profile.name,比if (user && user.profile) {...}少写两行,且不会因user.profile.name报错 - 条件触发副作用:
isMounted && updateUI(),只有组件挂载时才调用更新,updateUI()不会意外执行 - 链式调用防崩:
data?.items && data.items.length > 0 && renderList(data.items),结合可选链更稳妥
用 || 设置默认值或 fallback
|| 遇到第一个真值就返回它,后面全跳过——特别适合兜底、降级、配置合并。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 变量默认值:
const timeout = config.timeout || 3000,config.timeout 为 undefined 或 0 时自动取 3000 - 函数返回兜底:
getUserName() || "匿名用户",即使函数返回空字符串或 null,也能补上默认名 - 多级 fallback:
localStorage.getItem("theme") || sessionStorage.getItem("theme") || "light",按优先级逐层取值
组合使用提升表达力
&& 和 || 可嵌套或连用,实现接近 if-else 的语义,但只适用于简单分支。
立即学习“Java免费学习笔记(深入)”;
- 带条件的默认值:
(isLoggedIn && user.name) || "游客",登录了才显示名字,否则显示“游客” - 双重校验再执行:
isValidForm() && isNetworkOnline() && submitForm(),两个前提都满足才提交 - 注意优先级:&& 比 || 优先级高,
a || b && c等价于a || (b && c),复杂逻辑建议加括号明确意图
避开常见坑
短路很强大,但误用容易引入隐性 bug。
- 别把 0、'' 当作“无效”一概屏蔽:如果
count = 0是合法状态,count || 10就会错误 fallback;此时改用count !== undefined ? count : 10或空值合并count ?? 10 - 避免在短路中放有副作用的表达式:
flag && console.log("debug")虽可行,但调试困难、不易测试,推荐用 if 更清晰 - 异步不能短路:
await apiA() && await apiB()中 apiA 总是先执行完,想真正跳过 apiB 得用if (await apiA()) await apiB()

















