条件运算符(? :)是JavaScript中简洁替代单行if-else的表达式,适用于有返回值、逻辑简单、分支明确的场景,但不可用于多语句、副作用或深度嵌套。

条件运算符(? :)是 JavaScript 中简洁替代单行 if-else 的语法,适用于**有返回值、逻辑简单、分支明确**的场景。它不能替代含多语句、副作用(如修改变量、调用函数)、或嵌套较深的 if-else 块。
基本写法:直接返回值
当 if-else 仅用于给变量赋值或作为表达式的一部分时,三元运算符最自然:
-
if-else 写法:
let result;<br>if (score >= 60) {<br> result = '及格';<br>} else {<br> result = '不及格';<br>} -
三元替代:
const result = score >= 60 ? '及格' : '不及格';
嵌套需谨慎:避免可读性下降
两层嵌套尚可接受(如模拟 if-else-if),三层及以上建议改用 if-else 或 switch:
-
可读的双层嵌套:
const grade = score >= 90 ? 'A' : score >= 80 ? 'B' : 'C'; -
不推荐(难维护):
const msg = a ? (b ? (c ? 'x' : 'y') : 'z') : 'w';→ 改用 if-else 更清晰
注意副作用和短路行为
三元运算符是**表达式**,不是语句;它只执行被选中的分支:
-
flag ? console.log('yes') : console.log('no')✅ 可以,但属于“副作用”,语义不如 if-else 明确 -
flag ? doSomething() : doAnother()✅ 合理,尤其当两个函数都返回有意义的值时 -
flag ? x++ : y++✅ 有效,但 ++ 是副作用,建议优先考虑纯函数式写法
与逻辑运算符 || 和 ?? 的区别
别混淆用途:
-
a || b:取“真值”,适合默认值(name || '匿名') -
a ?? b:取“非 null/undefined 值”,更安全的默认值(input ?? '空') -
a ? b : c:基于布尔判断,必须显式指定 true 和 false 分支结果,适用条件明确的二选一











