三元条件运算符由问号(?)和冒号(:)组成,分隔三个表达式。它是 JavaScript 语言唯一一个需要三个运算子的运算符。如果第一个表达式的布尔值为**true**
,则返回第二个表达式的值,否则返回第三个表达式的值。
't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"
上面代码的t
和0
的布尔值分别为true
和false
,所以分别返回第二个和第三个表达式的值。
通常来说,三元条件表达式与**if...else**
语句具有同样表达效果,前者可以表达的,后者也能表达。但是两者具有一个重大差别:
if...else
是语句,没有返回值- 三元条件表达式是表达式,具有返回值
所以,在需要返回值的场合,只能使用三元条件表达式,而不能使用**if..else**
。
console.log(true ? 'T' : 'F');
上面代码中,console.log
方法的参数必须是一个表达式,这时就只能使用三元条件表达式。如果要用if...else
语句,就必须改变整个代码写法了。
练习
根据当前年份,返回这一年二月份的天数
var year = 2000;
//是否是闰年
var isLeap = year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
//得到该年份二月的天数
var days = isLeap ? 29 : 28;
console.log("二月的天数为:" + days);
下面程序的输出结果是什么?
var x = 1;
x = x++ >= 1 ? x++ * x++ : ++x * ++x;
console.log(x); // 6