引入:咱们在日常生活中,有很多事件是须要做判断的,比如说,去服装城买衣服,你看中一件衣服,老板要600元,你立马就会想,这个价格是否贵了,判断的后果只有两种可能,一是贵,二是不贵,贵了你就不买了,不贵你就买了。再比方去网吧,网管也要判断你是否满18岁,后果也只有两种,是和否,是就上网,不是就看他人上网,再比方,学校依据考试成绩对每个人进行评级,如果问题大于60就合格,否则就不合格,如果问题大于90,就优良等等。。。在咱们的代码中,也会有很多判断,比方咱们做的练习,小红满足条件了,就能嫁人了,不满足条件就不能嫁人。咱们昨天只是能看到一个布尔值,并没有进行下一步的操作,通过明天的学习就能够进行下一步的操作了,咱们明天学习的次要内容就是判断,也叫做逻辑分支。
判断也会有很多种,比方:
- 考试成绩大于60,及格
- 考试成绩大于60,及格,否则,不及格
- 考试成绩如果大于60并且小于80,及格,如果大于80并且小于90,良好,如果大于90,优良
根据上述几种状况,咱们把判断分为三种,依据后果只做一个件事件的,叫单分支,做两件事件的,叫做双分支,做多件事件的,叫多分支。
单分支
语法:
if(条件表达式){ 当条件表达式的后果为true的时候要执行的代码}
例:
var age;if(age>18){ alert("曾经成年了");}
双分支
语法:
if(条件表达式){ 当条件示意式的后果为true的时候要执行的代码}else{ 当条件表达式的后果为false的时候要执行的代码 }
例:
if(age>18){ alert("成年了");}else{ alert("未成年");}
案例:输出年份,判断是否是平年
多分支
语法:
if(条件表达式1){ 当条件表达式1的后果为true的时候,要执行的代码}else if(条件表达式2){ 当条件表达式2的后果为true的时候,要执行的代码}else if(条件表达式3){ 当条件表达式3的后果为true的时候,要执行的代码}。。。}else{}# 多分支能够有若干个else if,else依据须要能够有也能够没有
例:
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("输出不正确"); }}
分支构造的简写形式
如果单分支或双分支以及多分支的大括号中只有一行代码的时候,大括号能够省略。
例:
// 单分支的简写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("输出不正确");}
分支构造的嵌套
例:定义三个变量,求出三个值中的最大值。
var a,b,c;if(a>b){ if(a>c){ alert("变量a最大"); }else{ alert("变量c最大"); }}else{ if(b>c){ alert("变量b最大"); }else{ alert("变量c最大"); }}
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("输出谬误"); }}
<font color="red">留神:应用多路判断的时候,能应用switch进行判断,就尽量应用switch,因为switch的判断都是确定的值,条件比较简单,所以效率高。</font>
应用场景:
- 如果判断的条件比较复杂,应用if
条件是确定的值,分两种状况:
- 如果判断的分支小于等于3个,就应用if,这时候的效率和switch一样
- 如果大于3个,就应用switch。
- switch判断应用的是<font color="red">全等于(===)</font>
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("请输出一个月份:");if(isNaN(month) || month<=0 || month>12){ alert("输出谬误");}else{ switch(day){ 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("输出谬误"); }}
if条件中的细节
if条件的后果是布尔值,所以能够将布尔值当做条件放入if的小括号中
例:
if(true){ alert("真的");}else{ alert("假的");}
如果将别的非布尔值的表达式或数据放入条件小括号中,会产生隐形的类型转换
例:
if(2){ // 这里的2被转换成了布尔型 console.log(2);}
三元运算
if双分支有一种简写形式:
条件?条件成立时运行的代码段:条件不成立时运行的代码段;
例:
a>b?console.log(a):console.log(b);
这种表白双分支的形式叫做三元运算,也叫做三元表达式。
三元运算有个特点:能够将整个表达式当做一个值,能够赋值给一个变量,也能够输入
例:
var max = a>b?a:b; // 将a与b中较大的数赋值给变量maxconsole.log(a>b?a:b); // 将a与b中较大的数输入