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