JavaScript 中提供了一种叫做“三元运算”的语法形式,让我们可以方便地实现选择。

三元运算是一个固定格式,语法是:

条件表达式 ? 表达式 1 :表达式 2

问号前面是判断的条件,问号后面用冒号隔开两个表达式。当条件表达式为 true 时调用表达式 1,为 false

时调用表达式 2。因为它每次需要三个操作数,所以这个语法格式就被叫做“三元运算”,问号和冒号就共同被

称为“三元运算符”。

例如:

var a = 3 > 8 ? 5 : 6;

alert(a); //6

明显的,3 > 8 的结果是 false,所以此时 a 的值是冒号后面的数字 6。程序将弹出 6。

如本例所示,三运运算符的应用场景非常固定:根据某个条件是否成立,在两个不同值中决定变量的值。三

元运算符的方便之处体现在它“体型小巧”,不需要用 “盖一个 if 高楼”。

比如根据用户年龄是否大于等于 18 岁,决定它是成年人还是未成年人,此时三元运算符只需要一行语句:

var type = age >= 18 ? "成年人" : "未成年人";

而如果用 if 语句书写本程序,则需要 4 行语句:

if(age >= 18){

var type = "成年人";

}else{

var type = "未成年人";

}

遇见“根据某个条件是否成立,在两个不同值中决定变量的值”的情况,要想起使用三元运算符。

 短路计算实现条件分支

我们学习过逻辑运算符“&&”的短路计算,它也可以实现条件分支。

我们知道,且运算的口诀是“都真才真”。所以当 a && b 运算的时候,如果 a 的值是假,则无论 b 的值是

什么,这个表达式的总结果一定是假。所以 a && b 运算,当 a 的值是假时,此时 JavaScript 引擎将不再计算

b 的值,如同 b 被“短路”。反之,当 a 的值是真的时候,b 才不会被短路。

简单来说,a && b 运算中:a 真则 b 短路,a 假则 b 执行。

例如:

var age = prompt("请输入你的年龄");

age >= 18 && alert("你成年了");

程序中 alert("成年了")的执行前提是 age >= 18 成立。如果 age >= 18 不成立,则 alert("成年了")

被“短路”,将不会执行。

事实上,任何只有 1 行且没有 else 部分的 if 语句,都可以改写为短路语法。比如:

if(age > 18) alert("成年了");

可以改写为

age > 18 && alert("成年了");

使用短路计算实现选择逻辑,会让程序更加精简,变得优雅。

本章作业题

1. 编写程序:用户依次输入两个数字 a、b,检查 a 能否被 b 整除。

2. 编写程序:用户依次输入两个数字 a、b,弹出其中的较大数字。

3. 阅读下面的程序,写出程序运行结果。

var a = 3 * 6 % 9;

var b = parseInt(3.8) == "3" ? 0 : 1;

console.log(a / b);

4. 编写程序:用户输入一个年份,判断这个年是否是闰年。

判断闰年条件:

① 非整百年数除以 4,无余为闰,有余不闰;

② 整百年数除以 400,无余为闰,有余不闰。

比如:

2000 年,整百数年,就要用②公式,除以 400,无余数,所以是闰年。

1900 年,整百年数,就要用②公式,除以 400,有余数,所以不是闰年。

5. 某公司计算年终奖,规则如下:

工作满 0 年,发月薪的 1 倍月薪年终奖,如果月薪大于 8000,那么就是发 1.2 倍

工作满 1 年,发月薪的 1.5 倍月薪年终奖,如果月薪大于 10000,那么就是发 1.7 倍

工作满 2 年及更多,发月薪的 3 倍月薪年终奖,如果月薪大于 12000,那么就是发 3.2 倍

用 JavaScript 编写程序,由用户输入工作了几年,可以输入 0,然后输入月薪,显示年终奖。

6. 使用 switch-case 语句编写星座运势程序:用户输入自己的星座,显示当天的运势。运势内容可以自由编

写。

7. 将下面的程序改写为三元运算符写法:

if(age >= 18){

var type = "成年人";

}else{

var type = "未成年人";

}