&& 用于条件执行副作用或安全取值,左侧为真才执行右侧并返回其值;不适用于布尔判断场景,常与 || 或 ?? 组合提供默认值。

用 && 替代简易的 if,核心是抓住“左侧为真才执行右侧”这一行为——它不返回布尔值,而是返回表达式结果,适合触发副作用或安全取值。
只在条件成立时执行操作
当你要做的是“如果 A 成立,就运行 B”,且 B 是函数调用、DOM 修改、日志打印等有副作用的操作,&& 就很自然:
-
isLoggedIn && renderDashboard()—— 登录了才渲染面板,没登录什么也不干 -
user && user.isActive && showWelcomeMessage()—— 确保 user 存在且激活,才弹欢迎语 -
debugMode && console.log('当前状态:', state)—— 调试开关一开,日志自动输出
避免访问 undefined 报错(安全取值)
深层属性访问容易因中间项为 null 或 undefined 导致报错,&& 可以逐层守门:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
const name = user && user.profile && user.profile.name—— 任一环节为假值,立刻停止并返回该假值(不会报Cannot read property 'name' of undefined) - 注意:它返回的是第一个假值(比如
user是null,结果就是null),不是undefined;如需统一兜底,可接|| '默认名'
和 if 的关键区别:不适用于需要布尔判断的场景
&& 返回的是表达式本身的值,不是 true 或 false。所以这些写法要避免:
- ❌
if (user && user.isAdmin && showAdminPanel()) { ... }—— 这里if判断的是showAdminPanel()的返回值,不是用户权限 - ✅ 正确做法是分开:权限检查用布尔逻辑,副作用执行用 && 单独一行
- ❌ 不要用 && 去给变量赋布尔值,比如
const canEdit = post && post.authorId === userId看似可行,但若post为null,canEdit就是null,不是false;应改用!!(post && post.authorId === userId)或直接用三元
搭配 || 或 ?? 实现更完整的默认逻辑
单独 && 擅长“守门”,但不提供 fallback;常和 || 或 ?? 组合使用:
-
const title = article && article.title || '无标题'—— 有 article 且有 title 才取值,否则用默认 -
const avatar = user && user.avatar ?? '/default-avatar.png'—— ?? 更精准,只在null/undefined时生效,不会把''或0当假值误替换
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










