3.1 条件判断语句
视频讲解
在日常生活中,人们可能会根据不同的条件做出不同的选择。例如,根据路标选择走哪条路,根据第二天的天气情况选择做什么事情。在编写程序的过程中也经常会遇到这样的情况,这时就需要使用条件判断语句。所谓条件判断语句就是对语句中不同条件的值进行判断,进而根据不同的条件执行不同的语句。条件判断语句主要包括两类:一类是if语句,另一类是switch语句。下面对这两种类型的条件判断语句进行详细的讲解。
3.1.1 if语句
if语句是最基本、最常用的条件判断语句,通过判断条件表达式的值来确定是否执行一段语句,或者选择执行哪部分语句。
1.简单if语句
在实际应用中,if语句有多种表现形式。简单if语句的语法格式如下:
if(表达式){ 语句 }
参数说明。
表达式:必选项,用于指定条件表达式,可以使用逻辑运算符。
语句:用于指定要执行的语句序列,可以是一条或多条语句。当表达式的值为true时,执行该语句序列。
简单if语句的执行流程如图3.1所示。
图3.1 简单if语句的执行流程
在简单if语句中,首先对表达式的值进行判断,如果它的值是true,则执行相应的语句,否则就不执行。
例如,根据比较两个变量的值,判断是否输出比较结果。代码如下:
01 var a=200; //定义变量a,值为200 02 var b=100; //定义变量b,值为100 03 if(a>b){ //判断变量a的值是否大于变量b的值 04 document.write("a大于b"); //输出a大于b 05 } 06 if(a<b){ //判断变量a的值是否小于变量b的值 07 document.write("a小于b"); //输出a小于b 08 }
运行结果为:
a大于b
说明
当要执行的语句为单一语句时,其两边的大括号可以省略。
例如,下面的这段代码和上面代码的执行结果是一样的,都可以输出“a大于b”。
01 var a=200; //定义变量a,值为200 02 var b=100; //定义变量b,值为100 03 if(a>b) //判断变量a的值是否大于变量b的值 04 document.write("a大于b"); //输出a大于b 05 if(a<b) //判断变量a的值是否小于变量b的值 06 document.write("a小于b"); //输出a小于b
【例3.01】将3个数字10、20、30分别定义在变量中,应用简单if语句获取这3个数中的最大值。代码如下:(实例位置:资源包\源码\03\3.01)
01 <script type="text/javascript"> 02 var a,b,c,maxValue; //声明变量 03 a=10; //为变量赋值 04 b=20; //为变量赋值 05 c=30; //为变量赋值 06 maxValue=a; //假设a的值最大,定义a为最大值 07 if(maxValue<b){ //如果最大值小于b 08 maxValue=b; //定义b为最大值 09 } 10 if(maxValue<c){ //如果最大值小于c 11 maxValue=c; //定义c为最大值 12 } 13 alert(a+"、"+b+"、"+c+"三个数的最大值为"+maxValue); //输出结果 14 </script>
运行结果如图3.2所示。
图3.2 获取3个数中的最大值
2.if…else语句
if…else语句是if语句的标准形式,在if语句简单形式的基础之上增加一个else从句,当表达式的值是false时则执行else从句中的内容。
语法如下:
if(表达式){ 语句1 }else{ 语句2 }
参数说明。
表达式:必选项,用于指定条件表达式,可以使用逻辑运算符。
语句1:用于指定要执行的语句序列。当表达式的值为true时,执行该语句序列。
语句2:用于指定要执行的语句序列。当表达式的值为false时,执行该语句序列。
if...else语句的执行流程如图3.3所示。
图3.3 if...else语句的执行流程
在if语句的标准形式中,首先对表达式的值进行判断,如果它的值是true,则执行语句1中的内容,否则执行语句2中的内容。
例如,根据比较两个变量的值,输出比较的结果。代码如下:
01 var a=100; //定义变量a,值为100 02 var b=200; //定义变量b,值为200 03 if(a>b){ //判断变量a的值是否大于变量b的值 04 document.write("a大于b"); //输出a大于b 05 }else{ 06 document.write("a小于b"); //输出a小于b 07 }
运行结果为:
a小于b
说明
上述if语句是典型的二路分支结构。当语句1、语句2为单一语句时,其两边的大括号也可以省略。
例如,上面代码中的大括号也可以省略,程序的执行结果是不变的,代码如下:
01 var a=100; //定义变量a,值为100 02 var b=200; //定义变量b,值为200 03 if(a>b) //判断变量a的值是否大于变量b的值 04 document.write("a大于b"); //输出a大于b 05 else 06 document.write("a小于b"); //输出a小于b
【例3.02】如果某一年是闰年,那么这一年的2月份就有29天,否则这一年的2月份就有28天。应用if…else语句判断2010年2月份的天数。代码如下:(实例位置:资源包\源码\03\3.02)
01 <script type="text/javascript"> 02 var year=2010; //定义变量 03 var month=0; //定义变量 04 if((year%4==0 && year%100!=0)||year%400==0){ //判断指定年是否为闰年 05 month=29; //为变量赋值 06 }else{ 07 month=28; //为变量赋值 08 } 09 alert("2010年2月份的天数为"+month+"天"); //输出结果 10 </script>
运行结果如图3.4所示。
图3.4 输出2010年2月份的天数
3.if…else if语句
if语句是一种使用很灵活的语句,除了可以使用if...else语句的形式,还可以使用if...else if语句的形式。这种形式可以进行更多的条件判断,不同的条件对应不同的语句。if...else if语句的语法格式如下:
if (表达式1){ 语句1 }else if(表达式2){ 语句2 } … else if(表达式n){ 语句n }else{ 语句n+1 }
if...else if语句的执行流程如图3.5所示。
图3.5 if...else if语句的执行流程
【例3.03】将某学校的学生成绩转化为不同等级,划分标准如下:
① “优秀”,大于等于90分。
② “良好”,大于等于75分。
③ “及格”,大于等于60分。
④ “不及格”,小于60分。
假设周星星的考试成绩是85分,输出该成绩对应的等级。其关键代码如下:(实例位置:资源包\源码\03\3.03)
01 <script type="text/javascript"> 02 var grade = ""; //定义表示等级的变量 03 var score = 85; //定义表示分数的变量score值为85 04 if(score>=90){ //如果分数大于等于90 05 grade = "优秀"; //将"优秀"赋值给变量grade 06 }else if(score>=75){ //如果分数大于等于75 07 grade = "良好"; //将"良好"赋值给变量grade 08 }else if(score>=60){ //如果分数大于等于60 09 grade = "及格"; //将"及格"赋值给变量grade 10 }else{ //如果score的值不符合上述条件 11 grade = "不及格"; //将"不及格"赋值给变量grade 12 } 13 alert("周星星的考试成绩"+grade); //输出考试成绩对应的等级 14 </script>
运行结果如图3.6所示。
图3.6 输出考试成绩对应的等级
4.if语句的嵌套
if语句不但可以单独使用,而且可以嵌套应用,即在if语句的从句部分嵌套另外一个完整的if语句。基本语法格式如下:
if (表达式1){ if(表达式2){ 语句1 }else{ 语句2 } }else{ if(表达式3){ 语句3 }else{ 语句4 } }
例如,某考生的高考总分是620,英语成绩是120。假设重点本科的录取分数线是600,而英语分数必须在130以上才可以报考外国语大学,应用if语句的嵌套判断该考生能否报考外国语大学,代码如下:
01 var totalscore=620; //定义总分变量 02 var englishscore=120; //定义英语分数变量 03 if(totalscore>600){ //如果总分大于600 04 if(englishscore>130){ //如果英语分数大于130 05 alert("该考生可以报考外国语大学"); //输出字符串 06 }else{ 07 alert("该考生可以报考重点本科,但不能报考外国语大学"); //输出字符串 08 } 09 }else{ 10 if(totalscore>500){ //如果总分大于500 11 alert("该考生可以报考普通本科"); //输出字符串 12 }else{ 13 alert("该考生只能报考专科"); //输出字符串 14 } 15 }
运行结果如图3.7所示。
图3.7 输出该考生能否报考外国语大学
说明
在使用嵌套的if语句时,最好使用大括号{}来确定相互之间的层次关系。否则,由于大括号{}使用位置的不同,可能导致程序代码的含义完全不同,从而输出不同的内容。
【例3.04】假设某工种的男职工60岁退休,女职工55岁退休,应用if语句的嵌套来判断一位58岁的女职工是否已经退休。代码如下:(实例位置:资源包\源码\03\3.04)
01 <script type="text/javascript"> 02 var sex="女"; //定义表示性别的变量 03 var age=58; //定义表示年龄的变量 04 if(sex=="男"){ //如果是男职工就执行下面的内容 05 if(age>=60){ //如果男职工在60岁以上 06 alert("该男职工已经退休"+(age-60)+"年"); //输出字符串 07 }else{ //如果男职工在60岁以下 08 alert("该男职工并未退休"); //输出字符串 09 } 10 }else{ //如果是女职工就执行下面的内容 11 if(age>=55){ //如果女职工在55岁以上 12 alert("该女职工已经退休"+(age-55)+"年"); //输出字符串 13 }else{ //如果女职工在55岁以下 14 alert("该女职工并未退休"); //输出字符串 15 } 16 } 17 </script>
运行结果如图3.8所示。
图3.8 输出该女职工是否已退休
3.1.2 switch语句
switch是典型的多路分支语句,其作用与if...else if语句基本相同,但switch语句比if...else if语句更具有可读性,它根据一个表达式的值,选择不同的分支执行。而且switch语句允许在找不到一个匹配条件的情况下执行默认的一组语句。switch语句的语法格式如下:
switch (表达式){ case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; … case 常量表达式n: 语句n; break; default: 语句n+1; break; }
参数说明。
表达式:任意的表达式或变量。
常量表达式:任意的常量或常量表达式。当表达式的值与某个常量表达式的值相等时,就执行此case后相应的语句;如果表达式的值与所有的常量表达式的值都不相等,则执行default后面相应的语句。
break:用于结束switch语句,从而使JavaScript只执行匹配的分支。如果没有了break语句,则该匹配分支之后的所有分支都将被执行,switch语句也就失去了使用的意义。
switch语句的执行流程如图3.9所示。
图3.9 switch语句的执行流程
说明
default语句可以省略。在表达式的值不能与任何一个case语句中的值相匹配的情况下,JavaScript会直接结束switch语句,不进行任何操作。
注意
case后面常量表达式的数据类型必须与表达式的数据类型相同,否则匹配会全部失败,而去执行default语句中的内容。
【例3.05】某公司年会举行抽奖活动,中奖号码及其对应的奖品设置如下:
① “1”代表“一等奖”,奖品是“华为手机”。
② “2”代表“二等奖”,奖品是“光波炉”。
③ “3”代表“三等奖”,奖品是“电饭煲”。
④其他号码代表“安慰奖”,奖品是“16G-U盘”。
假设某员工抽中的奖号为3,输出该员工抽中的奖项级别以及所获得的奖品。代码如下:(实例位置:资源包\源码\03\3.05)
01 <script type="text/javascript"> 02 var grade=""; //定义表示奖项级别的变量 03 var prize=""; //定义表示奖品的变量 04 var code=3; //定义表示中奖号码的变量值为3 05 switch(code){ 06 case 1: //如果中奖号码为1 07 grade="一等奖"; //定义奖项级别 08 prize="华为手机"; //定义获得的奖品 09 break; //退出switch语句 10 case 2: //如果中奖号码为2 11 grade="二等奖"; //定义奖项级别 12 prize="光波炉"; //定义获得的奖品 13 break; //退出switch语句 14 case 3: //如果中奖号码为3 15 grade="三等奖"; //定义奖项级别 16 prize="电饭煲"; //定义获得的奖品 17 break; //退出switch语句 18 default: //如果中奖号码为其他号码 19 grade="安慰奖"; //定义奖项级别 20 prize="16G-U盘"; //定义获得的奖品 21 break; //退出switch语句 22 } 23 document.write("该员工获得了"+grade+"<br>奖品是"+prize); //输出奖项级别和获得的奖品 24 </script>
运行结果如图3.10所示。
图3.10 输出奖项和奖品
说明
在程序开发的过程中,使用if语句还是使用switch语句可以根据实际情况而定,尽量做到物尽其用,不要因为switch语句的效率高就一味地使用,也不要因为if语句常用就不应用switch语句。要根据实际的情况,具体问题具体分析,使用最适合的条件语句。一般情况下,对于判断条件较少的可以使用if条件语句,但是在实现一些多条件的判断中,就应该使用switch语句。