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 = "未成年人";
}