JavaScript短路写法(&&和||)利用逻辑运算符的短路求值特性实现条件执行与默认值赋值:&&在左侧真值时执行右侧,常用于条件触发副作用;||在左侧假值时返回右侧,用于默认值设置;组合&& ||可模拟三元但需确保中间值非假值;适用简洁场景,复杂逻辑仍应使用if。

JavaScript 中的短路写法(&& 和 ||)本质是利用逻辑运算符的“短路求值”特性,在不写 if 的前提下实现条件判断或默认值赋值。它不是万能替代,但用对场景能显著简化代码。
用 && 替代“条件为真时执行”的 if
当左侧表达式为真值(truthy),整个 && 表达式返回右侧表达式的结果;若左侧为假值(falsy),则直接返回左侧,不再计算右侧 —— 这就天然实现了“只在条件成立时才运行后续操作”。
- 适用场景:执行副作用操作,比如调用函数、修改 DOM、打印日志等
- 注意:不能用于需要明确返回布尔值的逻辑判断(因为返回的是表达式结果,不是 true/false)
✅ 正确示例:
// 原写法
if (user && user.isActive) {
showWelcomeMessage();
}
// 短路写法(等价)
user && user.isActive && showWelcomeMessage();
用 || 设置默认值(替代 if + 赋值)
|| 在左侧为假值时返回右侧表达式,常用于提供后备值。ES6 的空值合并操作符 ?? 更精准(只在 null 或 undefined 时生效),但 || 在多数默认值场景仍简洁有效。
立即学习“Java免费学习笔记(深入)”;
-
常见假值:
false、0、''(空字符串)、null、undefined、NaN -
慎用:如果 0 或空字符串是合法值,别用
||,改用??或三元运算符
✅ 示例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
// 原写法
let name = user.name;
if (!name) {
name = '匿名用户';
}
// 短路写法
const name = user.name || '匿名用户';
组合使用 && 和 || 实现“条件选择”(类似三元)
虽然不如三元运算符 a ? b : c 直观,但有时可用 && + || 快速实现单分支逻辑选择,尤其适合简单布尔分支。
-
原理:利用
a && b || c结构 —— 若 a 为真,返回 b;否则跳过 b,返回 c -
风险:当 b 是假值时,整个表达式会错误返回 c(因
b || c触发)。所以仅推荐 b 恒为真值时使用
✅ 安全示例(b 是非空字符串):
const statusText = isActive && '在线' || '离线'; // isActive 为 true → '在线';false → '离线'
❌ 危险示例(避免):
const value = flag && 0 || 100; // flag 为 true 时,结果却是 100(因 0 || 100 → 100)
→ 这种情况请直接用三元:flag ? 0 : 100
短路写法的边界与提醒
短路写法是语法糖,不是流程控制语句。它适合表达“有则执行 / 无则兜底”的简洁意图,但不适用于复杂分支、多步骤条件或需要 else if 的场景。
- 可读性优先:团队协作中,过度嵌套短路(如
a && b && c && d())反而难懂,该用 if 就用 if - 不要滥用副作用:把
fetch()或console.log()放在短路右侧没问题;但把它作为核心业务逻辑入口,会让调试和测试变困难 - 类型安全提示:TypeScript 下,短路表达式的返回类型可能变联合类型,需留意类型推导是否符合预期

















