条件(三元)运算符是 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) |