3.3 流程控制语句

视频讲解:光盘\TM\lx\3\07流程控制语句.mp4

流程控制语句对于任何一门编程语言都是至关重要的,JavaScript也不例外。在JavaScript中提供了if条件判断语句、switch多分支语句、for循环语句、while循环语句、do…while循环语句、break语句和continue语句7种流程控制语句。

3.3.1 if条件判断语句

if条件判断语句是最基本、最常用的流程控制语句,可以根据条件表达式的值执行相应的处理。if语句的语法格式如下:

        if(expression){
            statement 1
        }else{
            statement 2
        }

参数说明:

expression:必选项。用于指定条件表达式,可以使用逻辑运算符。

statement 1:用于指定要执行的语句序列。当expression的值为true时,执行该语句序列。

statement 2:用于指定要执行的语句序列。当expression的值为false时,执行该语句序列。

if...else条件判断语句的执行流程如图3.4所示。

图3.4 if...else条件判断语句的执行流程

说明

上述if语句是典型的二路分支结构。其中else部分可以省略,而且statement1为单一语句时,其两边的大括号也可以省略。

例如,下面3段代码的执行结果是一样的,都可以计算2月份的天数。

if语句是一种使用很灵活的语句,除了可以使用if...else的形式外,还可以使用if...else if的形式。if...else if语句的语法格式如下:

        if (expression 1){
            statement 1
        }else if(expression 2){
            statement 2
        }
        …
        else if(expression n){
            statement n
        }else{
            statement n+1
        }

if...else if语句的执行流程如图3.5所示。

图3.5 if...else if语句的执行流程

【例3.18】应用if语句验证用户登录信息。(实例位置:光盘\TM\sl\3\2)

(1)在页面中添加用户登录表单及表单元素。具体代码如下:

        <form name="form1" method="post" action="">
            用户名:<input name="user" type="text" id="user">
            密码:<input name="pwd" type="text" id="pwd">
            <input name="Button" type="button" class="btn_grey" value="登录">
            <input name="Submit2" type="reset" class="btn_grey" value="重置">
        </form>

(2)编写自定义的JavaScript函数check(),用if语句验证登录信息是否为空。check()函数的具体代码如下:

        <script language="javascript">
            function check(){
                if(form1.user.value==""){               //判断用户名是否为空
                    alert("请输入用户名!"); form1.user.focus(); return;
                }else if(form1.pwd.value==""){          //判断密码是否为空
                    alert("请输入密码!"); form1.pwd.focus(); return;
                }else{
                    form1.submit();                     //提交表单
                }
            }
        </script>

(3)在“登录”按钮的onclick事件中调用check()函数。具体代码如下:

        <input name="Button" type="button" class="btn_grey" value="登录" onclick="check()">

图3.6 运行结果

运行程序,单击“登录”按钮,将显示如图3.6所示的提示对话框。

说明

同Java语言一样,JavaScript的if语句也可以嵌套使用。由于JavaScript中if语句的嵌套方式同Java语言基本相同,在此不再赘述。

3.3.2 switch多分支语句

switch是典型的多路分支语句,其作用与嵌套使用if语句基本相同。switch语句比if语句更具有可读性,而且允许在找不到一个匹配条件的情况下执行一组默认的语句。switch语句的语法格式如下:

        switch (expression){
            case judgement 1:
                statement 1;
                break;
            case judgement 2:
                statement 2;
                break;
            …
            case judgement n:
                statement n;
                break;
            default:
                statement n+1;
                break;
        }

参数说明:

expression:任意的表达式或变量。

judgement:任意的常数表达式。当expression的值与某个judgement的值相等时,就执行此case后的statement语句;如果expression的值与所有judgement的值都不相等,则执行default后面的statement语句。

break:用于结束switch语句,从而使JavaScript只执行匹配的分支。如果没有break语句,则该switch语句的所有分支都将被执行,switch语句也就失去了使用的意义。

switch语句的执行流程如图3.7所示。

图3.7 switch语句的执行流程

【例3.19】应用switch语句输出今天是星期几。(实例位置:光盘\TM\sl\3\3)

关键代码如下:

    <script language="javascript">
    var now=new Date();             //获取系统日期
    var day=now.getDay();           //获取星期
    var week;
    switch (day){
        case 1:
            week="星期一";
            break;
        case 2:
            week="星期二";
            break;
        case 3:
            week="星期三";
            break;
        case 4:
            week="星期四";
            break;
        case 5:
            week="星期五";
            break;
        case 6:
            week="星期六";
            break;
        default:
            week="星期日";
            break;
    }
    document.write("今天是"+week);   //输出中文的星期
    </script>

程序的运行结果如图3.8所示。

图3.8 实例运行结果

技巧

在程序开发的过程中,使用if语句还是使用switch语句,可以根据实际情况而定。尽量做到物尽其用,不要因为switch语句的效率高,就一味地使用;也不要因为if语句常用,就懒得应用switch语句。要根据实际情况,具体问题具体分析,使用最适合的条件语句。一般情况下,对于判断条件较少的可以使用if条件语句,但是在实现一些多条件的判断中,就应该使用switch语句。

3.3.3 for循环语句

for循环语句也称为计次循环语句,一般用于循环次数已知的情况,在JavaScript中应用比较广泛。for循环语句的语法格式如下:

        for(initialize; test; increment){
            statement
        }

参数说明:

initialize:初始化语句,用来对循环变量进行初始化赋值。

test:循环条件,一个包含比较运算符的表达式,用来限定循环变量的边限。如果循环变量超过了该边限,则停止该循环语句的执行。

increment:用来指定循环变量的步幅。

statement:用来指定循环体,在循环条件的结果为true时,重复执行。

说明

for循环语句执行的过程是:先执行初始化语句,然后判断循环条件,如果循环条件的结果为true,则执行一次循环体,否则直接退出循环。然后执行迭代语句,改变循环变量的值。至此,完成一次循环。接下来,将进行下一次循环,直到循环条件的结果为false,才结束循环。

for循环语句的执行流程如图3.9所示。

图3.9 for循环语句的执行流程

说明

在for语句中可以使用break语句来中止循环语句的执行,关于break语句的用法参见3.3.6节。

为了使读者更好地理解for语句,下面将以一个具体的实例介绍for语句的应用。

【例3.20】计算100以内所有奇数的和。(实例位置:光盘\TM\sl\3\4)

关键代码如下:

程序运行结果如图3.10所示。

图3.10 运行结果

说明

在使用for语句时,一定要保证循环可以正常结束,也就是必须保证循环条件的结果存在为true的情况。否则,循环体将无休止地执行下去,从而形成死循环。例如,下面的循环语句就会造成死循环,原因是i永远大于等于1。

        for(i=1; i>=1; i++){
            alert(i);
        }

3.3.4 while循环语句

while循环语句也称为前测试循环语句,它是利用一个条件来控制是否要继续重复执行这个语句。while循环语句与for循环语句相比,无论是语法还是执行的流程,都较为简明易懂。while循环语句的语法格式如下:

        while(expression){
            statement
        }

参数说明:

expression:一个包含比较运算符的条件表达式,用来指定循环条件。

statement:用来指定循环体,在循环条件的结果为true时,重复执行。

说明

while循环语句之所以命名为前测试循环,是因为它要先判断此循环的条件是否成立,然后再进行重复执行的操作。也就是说,while循环语句执行的过程是先判断条件表达式,如果条件表达式的值为true,则执行循环体,并且在循环体执行完毕后,进入下一次循环,否则退出循环。

while循环语句的执行流程如图3.11所示。

图3.11 while循环语句的执行流程

注意

在使用while语句时,也一定要保证循环可以正常结束,即必须保证条件表达式的值存在为true的情况,否则将形成死循环。例如,下面的循环语句就会造成死循环,原因是i永远都小于100。

        var i=1;
        while(i<=100){
            alert(i);                           //输出i的值
        }

while循环语句经常用于循环执行的次数不确定的情况下。

【例3.21】列举出累加和不大于10的所有自然数。(实例位置:光盘\TM\sl\3\5)

关键代码如下:

      <script language="javascript">
          var i=1;                           //由于是计算自然数,所以i的初始值设置为1
          var sum=i;
          var result="";
          document.write("累加和不大于10的所有自然数为:<br>");
          while(sum<10){
              sum=sum+i;                     //累加i的值
              document.write(i+'<br>');      //输出符合条件的自然数
              i++;                           //该语句一定不要少
          }
      </script>

程序运行结果如图3.12所示。

图3.12 列举累加和不大于10的所有自然数

3.3.5 do…while循环语句

do…while循环语句也称为后测试循环语句,它也是利用一个条件来控制是否要继续重复执行这个语句。与while循环不同的是,它先执行一次循环语句,然后再去判断是否继续执行。do…while循环语句的语法格式如下:

        do{
            statement
        } while(expression);

参数说明:

statement:用来指定循环体,循环开始时先被执行一次,然后在循环条件的结果为true时,重复执行。

expression:一个包含比较运算符的条件表达式,用来指定循环条件。

说明

do…while循环语句执行的过程是:先执行一次循环体,然后再判断条件表达式,如果条件表达式的值为true,则继续执行,否则退出循环。也就是说,do…while循环语句中的循环体至少被执行一次。

do…while循环语句的执行流程如图3.13所示。

图3.13 do…while循环语句的执行流程

do…while循环语句同while循环语句类似,也常用于循环执行的次数不确定的情况下。

【例3.22】应用do…while循环语句列举出累加和不大于10的所有自然数。(实例位置:光盘\TM\sl\3\6)

关键代码如下:

        <script language="javascript">
            var sum=0;
            var i=1;                               //由于是计算自然数,所以i的初始值设置为1
            document.write("累加和不大于10的所有自然数为:<br>");
            do{
                sum=sum+i;                         //累加i的值
                document.write(i+'<br>');          //输出符合条件的自然数
                i++;                               //该语句一定不要少
            }while(sum<10);
        </script>

程序运行结果如图3.14所示。

图3.14 累加和不大于10的所有自然数

3.3.6 break与continue语句

break语句与continue语句都可以用于跳出循环,但两者也存在着一些区别。下面将详细介绍这两个关键字的用法。

break语句

break语句用于退出包含在最内层的循环或者退出一个switch语句。break语句的语法格式如下:

        break;

说明

break语句通常用在for、while、do…while或switch语句中。

【例3.23】在for语句中通过break语句中断循环。代码如下:

        var sum=0;
        for ( i=0; i<100; i++ ) {
            sum+=i;
            if  (sum>10)break;                             //如果sum>10,就会立即跳出循环
        }
        document.write("0至"+i+"(包括"+i+")之间自然数的累加和为:"+sum);

运行结果为:“0至5(包括5)之间自然数的累加和为:15”。

continue语句

continue语句和break语句类似,所不同的是,continue语句用于中止本次循环,直接开始下一次循环。其语法格式如下:

        continue;

说明

continue语句只能应用在while、for、do… while和switch语句中。

【例3.24】在for语句中通过continue语句计算金额大于等于1000的数据的和。代码如下:

        var total=0;
        var sum=new Array(1000,1200,100,600,736,1107,1205);     //声明一个一维数组
        for ( i=0; i<sum.length; i++ ) {
            if  (sum[i]<1000)continue;                          //不计算金额小于1000的数据
            total+=sum[i];
        }
            document.write("累加和为:"+total);                 //输出计算结果

运行结果为:“累加和为:4512”。

说明

当使用continue语句中止本次循环后,如果循环条件的结果为false,则退出循环,否则继续下一次循环。