三元条件运算符由问号(?)和冒号(:)组成,分隔三个表达式它是 JavaScript 语言唯一一个需要三个运算子的运算符。如果第一个表达式的布尔值为**true**,则返回第二个表达式的值,否则返回第三个表达式的值。

  1. 't' ? 'hello' : 'world' // "hello"
  2. 0 ? 'hello' : 'world' // "world"

上面代码的t0的布尔值分别为truefalse,所以分别返回第二个和第三个表达式的值。

通常来说,三元条件表达式与**if...else**语句具有同样表达效果,前者可以表达的,后者也能表达。但是两者具有一个重大差别:

  1. if...else是语句,没有返回值
  2. 三元条件表达式是表达式,具有返回值

所以,在需要返回值的场合,只能使用三元条件表达式,而不能使用**if..else**

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

上面代码中,console.log方法的参数必须是一个表达式,这时就只能使用三元条件表达式。如果要用if...else语句,就必须改变整个代码写法了。

练习

根据当前年份,返回这一年二月份的天数

  1. var year = 2000;
  2. //是否是闰年
  3. var isLeap = year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
  4. //得到该年份二月的天数
  5. var days = isLeap ? 29 : 28;
  6. console.log("二月的天数为:" + days);

下面程序的输出结果是什么?

  1. var x = 1;
  2. x = x++ >= 1 ? x++ * x++ : ++x * ++x;
  3. console.log(x); // 6