三、条件分支语句
1、三元运算符
他是唯一一个需要三个元素参与的运算。
也叫作三元表达式。
符号:? :
语法:boolean_expression ? true_value : false_value;
表示:前面的布尔表达式的值只有true和false两种,如果为true,运算结果就是冒号前面的true_value,如果是false,运算结果就是冒号后面的false_value。
表达式:在js里面如果出现表达式,在参与代码运行时,会先计算出结果。
var a = 23;
console.log(true ? 1 : 0);
console.log(false ? 1 : 0);
console.log(7 > 8 ? 1 : 0);
console.log(a > 0 ? 1 : 0);
console.log("nihao" ? 1 : 0);
console.log("" > 0 ? 1 : 0);
三元运算符的结果都可以用if语句模仿。
//用if语句模拟三元运算符
var a = 23;
if(a > 0) {
console.log(1);
}else {
console.log(0);
}
简单的二选一得到值的程序里,三元运算符比if语句要更加简单。而且,三元运算符会直接计算出一个值,可以赋值给变量。
扫描二维码关注公众号,回复:
4648415 查看本文章
var a = 7 > 8 ? 1 : 0; console.log(a);
遇到给变量通过条件二选一赋值的时候,三元表达式更加好用。
//输入工作年限、工资、输出年终奖
var year = parseInt(prompt("请输入你的工作年限,不满一年输入0"));
var salary = parseInt(prompt("请输入你的月工资"));
//工作满0年 发月薪的1倍月薪年终奖,如果月薪大于8000,那么就是发1.2倍
//工作满1年 发月薪的1.5倍月薪年终奖,如果月薪大于10000,那么就是发1.7倍
//工作满2年,甚至更多 发月薪的3倍月薪年终奖,如果月薪大于12000,那么就是发3.2倍
var bonus = 0; //里面要放数字类型
var beishu;
if(year == 0) {
//发月薪的1倍月薪年终奖,如果月薪大于8000,那么就是发1.2倍
beishu = salary > 8000 ?1.2 : 1;
}else if(year == 1) {
beishu =salary > 10000 ? 1.7 : 1.5;
}else {
beishu = salary > 12000 ? 3.2 : 3;
}
bonus = salary * beishu;
alert("您的年终奖是"+bonus+"元");
拓展:逻辑运算符也有选择的功能。
var year = parseInt(prompt("请输入你的工作年限,不满一年输入0")) || 0;
2、switch语句
开关语句允许一个程序求一个表达式的值,并且尝试去匹配表达式的值到一个case标签。如果匹配成功,这个程序执行相关的语句。
比较if语句和switch语句:
if语句:
//请用户输入一个星座,输出对应的星座运势
var xingzuo = prompt("请输入一个星座","白羊座");
//通过匹配对应的星座输出星座运势
if(xingzuo == "白羊座") {
alert("需要出外办事的次数多,与人交流顺畅融洽,这也是你拓展人脉的机会。但是天气炎热要注意防暑。");
}else if(xingzuo == "金牛座") {
alert("实力被压制总不能得到施展,让你大受打击,自信心下滑。若是今天要签约、谈判,务必要仔细看清楚条款" +
",以免被陷害了。");
}else if(xingzuo == "双子座") {
alert("虽然今天很忙,花费了很多精力时间在工作上,可最终很有可能白忙一场。要是感觉承受不住了,就休" +
"息一下先放下手上的事情,");
}else {
alert("不好意思,查不到了");
}
switch语句:
switch(xingzuo) {
case "白羊座" :
alert("需要出外办事的次数多,与人交流顺畅融洽,这也是你拓展人脉的机会。但是天气炎热要注意防暑。");
break;
case "金牛座" :
alert("实力被压制总不能得到施展,让你大受打击,自信心下滑。若是今天要签约、谈判,务必要仔细看" +
"清楚条款,以免被陷害了。");
break;
case "双子座" :
alert("虽然今天很忙,花费了很多精力时间在工作上,可最终很有可能白忙一场。要是感觉承受不住了,就" +
"休息一下先放下手上的事情,");
default :
alert("不好意思,查不到了");
break;
}
语法:
switch(expression){
case label1: //如果表达式的值等于label1,执行下面的statement1.
statement1;
break; //遇到break,直接跳出switch语句。
case label2: //如果表达式的值等于label2,执行下面的statement2.
statement2;
break; //遇到break,直接跳出switch语句。
case label3: //如果表达式的值等于label3,执行下面的statement3.
statement3;
break; //遇到break,直接跳出switch语句。
……
default: //前面的情况都不匹配,执行default后面的结构体
statement_n;
break;
}
default:相当于if语句里面的else。可以省略。如果写了,前面不符合就走default,如果不写,前面情况都不符合,直接跳出switch。后面的break可以不写。
break:打断程序,强制跳出当前的switch语句。如果不写break,程序会继续往下进行,直到碰到一个break或者程序执行完,才能跳出。
var a = parseInt(prompt("请输入一个个位数,会输出它的英文"));
switch (a) {
case 3 :
alert("three");
case 4 :
alert("four");
case 5 :
alert("five");
case 6 :
alert("six");
case 7 :
alert("seven");
case 8 :
alert("eight");
case 9 :
alert("nine");
default :
alert("sorry,I don't know");
}
虽然不写不能跳出程序,我们可以利用这个特点做一些特殊的小程序。
var a = parseInt(prompt("请输入一个个位数,会输出它是奇数还是偶数"));
switch (a) {
case 1 :
case 3 :
case 5 :
case 7 :
case 9 :
alert("奇数");
break;
default :
alert("偶数");
}