摘要:JS 的
&&、||不只是简单返回 true/false,存在短路运算,并且返回原始值。前端开发中经常使用
一、短路运算前置知识点
- 真假转换规则:数字
0默认视为false;''空字符串、null、undefined、NaN都属于假值,其余大多为真值。 - 重要特性:返回原始值
&&和||不会一定返回布尔 true/false,返回的是表达式本身原始的值,不是单纯布尔结果。 - 短路含义:满足条件之后,后面代码不再执行,直接截断。
二、逻辑与&&(找第一个假值)
语法:表达式1 && 表达式2
规则:
- 如果表达式 1 为假,直接返回表达式 1,表达式 2 不会执行(短路)
- 如果表达式 1 为真,返回表达式 2
- 链式连续
a && b && c:从左往右找,遇到第一个假直接返回;全部为真,则返回最后一个表达式的值
代码示例
// 左边为真,返回右边的值 console.log(88 && 66); // 66 console.log(10 && 20); // 20 // 左边是假值0,直接返回0,右边66完全不执行 console.log(0 && 66); // 0 // 左边真值,继续看右边,右边是假,返回0 console.log(99 && 0); // 0 // 全部真值,返回最末尾 console.log(10 && 20 && 30); //30一句话记忆:
&&找假,一假就停;全真返回最后一个。
三、逻辑或||(找第一个真值)
语法:表达式1 || 表达式2
规则:
- 如果表达式 1 为真,直接返回表达式 1,表达式 2 不会执行(短路)
- 如果表达式 1 为假,才返回表达式 2
- 链式连续
a || b || c || d:从左向右,遇到第一个真值立刻返回;全部都是假,返回最右侧最后一个表达式
代码示例
// 第一个值50是真值,直接返回50,后面100不执行,发生短路 console.log(50 || 100); //50 // 第一个0是假,无法短路,返回后面100 console.log(0 || 100); //100 // 两边都是假值,返回后面的空字符串 console.log(0 || ""); // ""四、&& 和 || 对比速查表
表格
| 运算符 | 作用 | 短路触发条件 | 链式运算行为 | |
|---|---|---|---|---|
&&逻辑与 | 寻找第一个假值 | 左边表达式为假,直接短路,右边不运行 | 遇假停止;全部为真,返回最末尾值 | |
| ` | ` 逻辑或 | 寻找第一个真值 | 左边表达式为真,直接短路,右边不运行 | 遇真停止;全部为假,返回最末尾值 |
⚠️关键点:二者返回原始表达式的值,不是单纯 true、false。很多初学者误以为运算结果只能是布尔,这是高频踩坑点。
五、短路运算在业务中的实际用途
||做兜底默认值
// 如果name是假值,就赋值'匿名用户' let name = '' || '匿名用户'; console.log(name); //匿名用户&&做简单条件判断
// flag为true,才执行后面函数 let flag = true; flag && console.log('条件成立才执行');注意:ES6 之后有
??空值合并运算符,专门处理null/undefined,和||有区别,不要完全混用。
六、踩坑点
- 短路:满足条件之后,后面代码完全不会执行,不要写依赖执行的逻辑放在短路后面。
- 返回原始值,不是 true/false。
88 && 66得到 66,而不是 true。 &&一假即停;||一真即停。- 假值集合:
0、''、NaN、null、undefined、false,这些在短路判断中当作 false。
短路运算是 JS 基础中非常重要的知识点,不仅面试常考,日常项目中大量简写代码底层都是这套逻辑,一定要理解短路截断和返回原始值这两个核心特性。