条件运算符

条件运算符(Conditional Operator)是 JavaScript 中唯一的一个三元运算符(三个操作数),有时直接称做三元运算符。

variable = boolean_expression ? true_value : false_value;

本质上,这就是基于对 boolean_expression 求值的结果,决定给变量 variable 赋什么值。如果求值结果是 true ,则给变量 variable 赋值true_value;如果求值结果是 false,则给变量 variable 赋值false_value

条件运算符的操作数可以是任意类型,第一个操作数当成布尔值,如果它是真值 true,那么将计算第二个操作数,并返回其计算结果。否则,如果第一个操作数是假值 false,那么将计算第三个操作数,并返回其计算结果。第二个和第三个操作数总是会计算其中之一,不可能两者同时执行。

其实使用 if 语句也会带来同样的效果,?:运算符只是提供了一种简写形式。下面是一个 ?: 的典型应用场景,判断一个变量是否有定义(并拥有一个有意义的真值),如果有定义则使用它,如果无定义则使用一个默认值:

greeting = 'hello ' + (username ? username : 'there');

这和下面使用 if 语句的代码是等价的,但显然上面的代码更加简洁:

greeting = 'hello ';
if (username) greeting += username;
else greeting += 'there';

条件运算符(三元条件表达式)与 if...else 语句具有同样表达效果,但是两者有一个重大差别。

类型返回值
if...else语句
条件运算符表达式

因此,在需要返回值的场合,只能使用条件运算符(三元条件表达式),而不能使用 if...else

console.log(true ? 'T' : 'F');
// 'T'

上面代码中,console.log()方法的参数必须是一个表达式,这时就只能使用三元条件表达式。