conditional (ternary) operator
is the only JavaScript operator that takes three operands: a condition followed by a question mark (
?
), then an expression to execute if the condition is
truthy
followed by a colon (
:
), and finally the expression to execute if the condition is
falsy
.
This operator is frequently used as a shortcut for the
if
语句。
condition ? exprIfTrue : exprIfFalse
condition
An expression whose value is used as a condition.
exprIfTrue
condition
evaluates to a
truthy
value (one which equals or can be converted to
true
).
exprIfFalse
condition
is
falsy
(that is, has a value which can be converted to
false
).
Besides
false
, possible falsy expressions are:
null
,
NaN
,
0
, the empty string (
""
), and
undefined
。若
condition
is any of these, the result of the conditional expression will be the result of executing the expression
exprIfFalse
.
var age = 26; var beverage = (age >= 21) ? "Beer" : "Juice"; console.log(beverage); // "Beer"
One common usage is to handle a value that may be
null
:
let greeting = person => {
let name = person ? person.name : `stranger`
return `Howdy, ${name}`
}
console.log(greeting({name: `Alice`})); // "Howdy, Alice"
console.log(greeting(null)); // "Howdy, stranger"
The ternary operator is right-associative, which means it can be "chained" in the following way, similar to an
if … else if … else if … else
chain:
function example(…) {
return condition1 ? value1
: condition2 ? value2
: condition3 ? value3
: value4;
}
// Equivalent to:
function example(…) {
if (condition1) { return value1; }
else if (condition2) { return value2; }
else if (condition3) { return value3; }
else { return value4; }
}
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of 'Conditional Operator' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Conditional operator (
c ? t : f
)
|
Chrome 1 | Edge 12 | Firefox 1 | IE 3 | Opera 3 | Safari 1 | WebView Android 1 | Chrome Android 18 | Firefox Android 4 | Opera Android 10.1 | Safari iOS 1 | Samsung Internet Android 1.0 | nodejs 0.1.100 |
完整支持