JavaScript从入门到精通(微视频精编版)
上QQ阅读APP看书,第一时间看更新

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语句。