JavaScript逻辑运算符&&、||、!返回操作数值并短路求值:&&遇假值返回该值,否则返最后操作数;||遇真值返回该值,否则返最后操作数;!和!!用于布尔转换;需注意优先级,复杂表达式应加括号。

JavaScript 中的逻辑运算符(&&、||、!)不只是做布尔判断,它们会返回操作数本身的值,并按从左到右顺序执行——一旦结果确定就停止,这就是短路求值。利用这个特性,可以简洁地实现默认值设置、条件执行、安全取值等常见需求。
用 && 实现“左侧为真才执行右侧”
&& 遇到第一个“假值”(falsy:false、0、""、null、undefined、NaN)就停止并返回它;否则返回最后一个操作数。常用于:
- 提供默认值:比如
const name = user && user.name || '匿名'不够安全,更推荐const name = user?.name ?? '匿名';但&&适合控制执行时机,如user && console.log(user.name)—— 只有 user 存在才打印 - 链式安全访问:虽然现代推荐可选链(
?.),但老环境可用user && user.profile && user.profile.avatar - 条件渲染或触发:React 中常写
{loading && <spinner></spinner>},loading 为 false 时直接跳过渲染
用 || 实现“左侧为假才尝试右侧”
|| 遇到第一个“真值”(truthy)就返回它;否则返回最后一个。最常用作默认值赋值:
- 设置默认参数:
function greet(name) { name = name || '游客'; console.log('你好,' + name); } - 注意陷阱:如果
name是0、false或空字符串,也会被覆盖。更稳妥用空值合并操作符:name ?? '游客' - 简化初始化:
const config = options || {};确保 config 至少是个对象
用 ! 和双非 !! 转换布尔值
! 返回布尔结果,!! 相当于强制转布尔类型:
立即学习“Java免费学习笔记(深入)”;
-
!null→true,!!null→false - 可用于快速判断存在性:
if (!!value) { ... },但通常直接写if (value)更自然 - 配合短路组合:
!user || !user.active || redirectLogin()表示“只要 user 不存在或未激活,就跳转登录”
组合多个逻辑运算符时注意优先级与括号
! 优先级最高,其次是 &&,最后是 ||。复杂表达式务必加括号明确意图:
- 错误写法:
a || b && c等价于a || (b && c),不是(a || b) && c - 清晰写法:
(a || b) && c或a || (b && c) - 实际例子:权限检查
isAdmin || (isLogin && hasPermission)表示“管理员,或者已登录且有权限”


















