条件(三元)运算符是 JavaScript 仅有的使用三个操作数的运算符。本运算符经常作为 if 语句的简短形式来使用。

语法

condition ? expr1 : expr2 

参数

condition
计算结果为true或false的表达式。
expr1, expr2
值可以是任何类型的表达式。

描述

如果条件值为真值(true),运算符就会返回 expr1 的值;否则, 就会返回 expr2 的值。例如, 根据 isMember 变量的值显示不同的信息,可以使用下面的表达式:

"The fee is " + (isMember ? "$2.00" : "$10.00")

同样也可以把三元运算符的值赋值给一个变量:

var elvisLives = Math.PI > 4 ? "Yep" : "Nope";

多个三元操作符也是可能的(注:条件运算符是右结合):

var firstCheck = false,
    secondCheck = false,
    access = firstCheck ? "Access denied" : secondCheck ? "Access denied" : "Access granted";
  
console.log( access ); // logs "Access granted"

还可以把三元操作符用在等式的左边:

var stop = false, age = 16;

age > 18 ? location.assign("continue.html") : stop = true;
stop; // true

你也可以在 expr1、expr2 里使用一个或多个的操作(用逗号分隔):

var stop = false, age = 23;

age > 18 ? (
    alert("OK, you can go."),
    location.assign("continue.html")
) : (
    stop = true,
    alert("Sorry, you are much too young!")
);

同样也可以在赋值过程中做多个操作。 如下所示,括号里的最后一个逗号分隔值是将被赋值的。

var age = 16;

var url = age > 18 ? (
    alert("OK, you can go."), 
    // alert 返回的值是 "undefined", 但它会被忽略,因为
    // 不是括号的最后一个逗号分隔值
    "continue.html" // 如果 age > 18,则这个值赋值给 url
) : (
    alert("You are much too young!"),
    alert("Sorry :-("),
    // 等等
    "stop.html" // 如果 !(age > 18) 为真,则这个值赋值给 url
);

location.assign(url); // "stop.html"

规范

规范 状态 说明
ECMAScript 1st Edition. Standard 初始定义。JavaScript 1.0 实现。
ECMAScript 5.1 (ECMA-262)
The conditional operator
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Conditional Operator
Standard  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

相关链接

文档标签和贡献者

 此页面的贡献者: ziyunfei, Ende93, lunix01
 最后编辑者: ziyunfei,