逻辑分支
一、if分支
1、单分支
语法:
if(条件表达式){
当条件表达式的结果为true的时候要执行的代码
}
例:
//判断一个数是否是偶数,是这输出这个数
var num = prompt("请输入一个数:");
if (num % 2 === 0) {
console.log(num);
}
2、双分支
语法:
if(条件表达式){
当条件表示式的结果为true的时候要执行的代码
}else{
当条件表达式的结果为false的时候要执行的代码
}
例:
//判断一个数是奇数还是偶数,是偶数输出yes,是奇数输出no
var num = prompt("请输入一个数:");
if (num % 2 === 0) {
console.log("yes");
} else {
console.log("no");
}
案例:判断一个数是否是水仙花数
var num=prompt("请输入一个数:");
var bai=parseInt(num/100);
var shi=parseInt(num/10%10);
var ge=num%10;
if(num==bai*bai*bai+shi*shi*shi+ge*ge*ge){
console.log(num+"是一个水仙花数");
}else{
console.log(num + "不是一个水仙花数");
}
3、多分支
语法:
if(条件表达式1){
当条件表达式1的结果为true的时候,要执行的代码
}else if(条件表达式2){
当条件表达式2的结果为true的时候,要执行的代码
}else if(条件表达式3){
当条件表达式3的结果为true的时候,要执行的代码
}
...
}else{
}
**多分支可以有若干个else if,else根据需要可以有也可以没有**
例:
var a = prompt("请输入一个成绩:");
a = Number(a);
//判断是否是一个数字
if (isNaN(a)) {
//不是就提示输入一个数字
alert("请输入一个数!");
} else {
//是一个数字就判断是否在0~100之间
if (a >= 0 && a <= 100) {
//在0~100就判断等级
if (a < 60) {
console.log("不及格");
} else if (a < 80) {
console.log("良好");
} else if (a <= 100) {
console.log("优秀");
}
} else {
//不在0~100就提示输入一个成绩
alert("请输入一个成绩!");
}
}
4、分支结构的简写方式
如果单分支或双分支以及多分支的大括号中只有一行代码的时候,大括号可以省略。 例:
// 单分支的简写
var age;
if(age>18)
alert("已经成年了");
// 双分支的简写
if(age>18)
alert("成年了");
else
alert("未成年");
// 多分支的简写
var score = Number(prompt("请输入考试成绩:"));
var score = Number(prompt("请输入考试成绩:"));
if(isNaN(score))
alert("输入不正确");
else{
if(score>=0 && score<60)
alert("不及格");
else if(score>=60 && score<70)
alert("及格了");
else if(score>=70 && score<80)
alert("丙");
else if(score>=80 && score<90)
alert("乙");
else if(score>=90 && score<=100)
alert("甲");
else
alert("输入不正确");
}
5、分支结构的嵌套
例:定义三个变量,求出三个值中的最大值。
var a,b,c;
if(a>b){
if(a>c){
alert("变量a最大");
}else{
alert("变量c最大");
}
}else{
if(b>c){
alert("变量b最大");
}else{
alert("变量c最大");
}
}
6、if条件中的细节
if条件的结果是布尔值,所以可以将布尔值当做条件放入if的小括号中 例:
if(true){
alert("真的");
}else{
alert("假的");
}
如果将别的非布尔值的表达式或数据放入条件小括号中,会发生隐形的类型转换 例:
if(2){ // 这里的2被转换成了布尔型
console.log(2);
}
二、switch分支
1、switch多路判断
语法:
switch(变量){
case 值1:
执行的代码块
break;
case 值2:
执行的代码块
break;
。。。
default:
执行代码块
}
使用说明:
- break表示当前分支执行后就结束switch的运行,后续代码不再运行
- default可以理解为判断语句中的else
- case理解为if来判断这个变量是否全等于某个值 例:
var day = Number(prompt("请输入一个0~7之间数字:"));
if(isNaN(day) || day<=0 || day>7){
alert("输入错误");
}else{
switch(day){
case 1:
alert("今天星期一");
break;
case 2:
alert("今天星期二");
break;
case 3:
alert("今天星期三");
break;
case 4:
alert("今天星期四");
break;
case 5:
alert("今天星期五");
break;
default:
alert("输入错误");
}
}
注意:使用多路判断的时候,能使用switch进行判断,就尽量使用switch,因为switch的判断都是确定的值,条件比较简单,所以效率高。 使用场景:
- 如果判断的条件比较复杂,使用if
- 条件是确定的值,分两种情况:
- 如果判断的分支小于等于3个,就使用if,这时候的效率和switch一样
- 如果大于3个,就使用switch。
- switch判断使用的是全等于(===)
2、switch 穿透写法
如果case后面不写break,那当前case执行后,会继续执行后面的case中的代码 输出1~5:
var day;
switch(day){
case 1:
alert("今天星期一");
break;
case 2:
alert("今天星期二");
break;
case 3:
alert("今天星期三");
case 4:
alert("今天星期四");
break;
case 5:
alert("今天星期五");
break;
default:
alert("输入错误");
}
当day的值为2的时候,不会执行后面的代码,当day的值为3的时候,执行完3的代码,还会执行4的代码,因为3的代码后面没有break。 这时候可以利用switch的这个特性,简写一些代码: 输入一个月份,判断并输出这个月有多少天?
var month = Number(prompt("请输入一个月份:"));
if(isNaN(month) || month<=0 || month>12){
alert("输入错误");
}else{
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
alert("这个月有31天");
break;
case 4:
case 6:
case 9:
case 11:
alert("这个月有30天");
break;
case 2:
alert("这个月有29天或28天");
break;
default:
alert("输入错误");
}
}
案例:输入一个1~5之间的数,算他的阶和
var num = prompt("请输入一个1~5的数");
num = Number(num);
if (!isNaN(num)) {
if (num > 0 && num < 6) {
var sum = 0;
switch (num) {
case 5: sum += 5;
case 4: sum += 4;
case 3: sum += 3;
case 2: sum += 2;
case 1: sum += 1;
}
console.log(sum);
} else {
alert("请输入一个1~5的数")
}
} else {
alert("这不是一个数!");
}
三、三元运算
if双分支有一种简写方式:
条件?条件成立时运行的代码段:条件不成立时运行的代码段;
例:
a>b?console.log(a):console.log(b);
这种表达双分支的方式叫做三元运算,也叫做三元表达式。 三元运算有个特点:可以将整个表达式当做一个值,可以赋值给一个变量,也可以输出 例:
var max = a>b?a:b; // 将a与b中较大的数赋值给变量max
console.log(a>b?a:b); // 将a与b中较大的数输出