JavaScript逻辑短路(&&和||)是运行时行为,遇结果确定即跳过后续执行,适用于默认参数、安全访问、条件渲染等场景,语义清晰且性能友好。

JavaScript 中的逻辑短路(&& 和 ||)不是“语法糖”,而是运行时行为:表达式一旦能确定结果,后续部分就跳过执行。它天然适配条件渲染和默认传参这类高频场景,写法简洁、语义清晰、性能友好。
用 || 快速设置默认参数
利用 || 遇真即返的特性,可为可能为假值的变量提供后备值:
-
const name = inputName || "游客"—— 当inputName是undefined、null、""、0或false时,自动取右侧字符串 -
const timeout = config.timeout || 3000—— 配置项缺失或为 0 时启用默认超时 - 注意:|| 对所有假值生效;若只想处理
null/undefined(比如允许0或""作为有效值),应改用??:config.count ?? 10
用 && 安全访问嵌套属性(模拟条件渲染)
在 JS 中没有原生“条件渲染语法”,但 && 的短路机制能自然实现“有才取,无则跳过”:
-
user && user.profile && user.profile.avatar—— 只要任一环节是undefined或null,整个表达式立即返回该假值,不会报Cannot read property 'profile' of undefined -
isLoggedIn && <span>欢迎回来</span>(JSX 中常见)—— 布尔值控制元素是否插入,本质就是靠 && 的短路逻辑 - 搭配函数调用也很实用:
dataReady && renderChart(),避免数据未就绪就执行渲染
组合使用实现更灵活的判断逻辑
当需要兼顾“存在性检查”和“默认兜底”时,&& 和 || 可链式配合:
立即学习“Java免费学习笔记(深入)”;
-
user && user.name || "匿名用户":先确保user存在,再取name;若name为空或未定义,则用默认名 -
(items.length > 0 && items) || ["暂无数据"]:有真实数据才返回数组,否则返回提示项(注意括号优先级) - 实际开发中建议拆解或改用空值合并+可选链提升可读性,例如:
user?.name ?? "匿名用户"
用短路做轻量级条件日志与回调触发
不依赖 if 语句,也能完成调试和可选执行:
-
DEBUG && console.log("当前状态:", state)—— 仅在DEBUG为真时打印,上线时设为false即可关闭,无需删代码 -
callback && callback(data)—— 安全调用可选回调函数,避免TypeError: callback is not a function -
isLoading || fetchUserData()—— 虽然不推荐(副作用放右边易混淆),但技术上成立:仅当isLoading为假时才触发请求


















