条件 (三元) 运算符

**条件(三元)运算符** 是 JavaScript 中唯一一个采用三个操作数的运算符:条件后跟问号 (?),然后是如果条件为 真值 则执行的表达式,后跟冒号 (:),最后是如果条件为 假值 则执行的表达式。此运算符通常用作 if...else 语句的替代方案。

试一试

语法

js
condition ? exprIfTrue : exprIfFalse

参数

条件

其值为条件的表达式。

exprIfTrue

如果条件评估为 真值(等于或可以转换为true 的值),则执行的表达式。

exprIfFalse

如果条件假值(即具有可以转换为false 的值的表达式),则执行的表达式。

描述

除了false 之外,可能的假值表达式还有:nullNaN0、空字符串 ("") 和undefined。如果条件是这些中的任何一个,则条件表达式的结果将是执行表达式exprIfFalse 的结果。

示例

一个简单的例子

js
const age = 26;
const beverage = age >= 21 ? "Beer" : "Juice";
console.log(beverage); // "Beer"

处理空值

一种常见的用法是处理可能为null 的值

js
const greeting = (person) => {
  const name = person ? person.name : "stranger";
  return `Howdy, ${name}`;
};

console.log(greeting({ name: "Alice" })); // "Howdy, Alice"
console.log(greeting(null)); // "Howdy, stranger"

条件链

三元运算符是右结合的,这意味着它可以以如下方式“链接”,类似于if … else if … else if … else

js
function example() {
  return condition1 ? value1
    : condition2 ? value2
    : condition3 ? value3
    : value4;
}

这等效于以下 if...else 链。

js
function example() {
  if (condition1) {
    return value1;
  } else if (condition2) {
    return value2;
  } else if (condition3) {
    return value3;
  } else {
    return value4;
  }
}

规范

规范
ECMAScript 语言规范
# sec-conditional-operator

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅