三元表达式适用于仅返回值的简单双分支场景。需满足:仅两个分支且各为单表达式、目的为取值而非执行动作、条件清晰;禁用场景包括含副作用、多语句、条件复杂或嵌套超两层。

三元表达式(? :)适合替代那种“只选一个值”的简单 if-else,比如赋值、返回、模板渲染等场景。它不是万能压缩器,但用对了能让代码更紧凑、逻辑更聚焦。
什么时候可以直接换?
满足以下全部条件时,替换最自然:
- 只有两个分支,且都只计算一个表达式(不执行函数调用、不改状态、不打印日志)
- 目的是获取值,而不是执行动作(比如赋给变量、作为函数返回值、插进 JSX 或模板里)
- 条件本身清晰,比如
score >= 60、user?.role === 'admin'
常见替换写法
核心结构是:条件 ? 真时的值 : 假时的值。例如:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 赋值:
const status = score >= 60 ? 'pass' : 'fail'; - 返回值:
const getName = (user) => user ? user.name : 'Anonymous'; - JSX 中控制显示:
{isLoading ? <Spinner /> : <Content />} - 模板字符串内嵌:
const msg = `用户${isActive ? '已激活' : '未激活'}`;
哪些情况千万别硬套?
强行用三元反而会让代码难懂甚至出错:
立即学习“Java免费学习笔记(深入)”;
- 任一分支里有副作用操作,比如
doSave()、console.log()、throw new Error() - 需要执行多条语句(哪怕只是加个日志再返回)
- 条件本身复杂,像
(a && b) || (!c && d)这种,建议保留 if 或拆成变量 - 嵌套超过两层,比如
a ? b : c ? d : e ? f : g,此时可读性断崖下跌
搭配现代语法更省事
三元常和可选链(?.)、空值合并(??)一起用,处理默认值或安全访问:
const title = article?.title ?? (isDraft ? '草稿' : '无标题');const display = isMobile ? menuItems.slice(0, 3) : menuItems;

















