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

3.2 循环语句

视频讲解

在日常生活中,有时需要反复地执行某些操作。例如,运动员要完成10000米的比赛,需要在跑道上跑25圈,这就是循环的一个过程。类似这样反复执行同一操作的情况,在程序设计中经常会遇到,为了满足这样的开发需求,JavaScript提供了循环语句。所谓循环语句就是在满足条件的情况下反复地执行某一个操作。循环语句主要包括while语句、do…while语句和for语句,下面分别进行讲解。

3.2.1 while语句

while循环语句也称为前测试循环语句,它是利用一个条件来控制是否要继续重复执行这个语句。while循环语句的语法格式如下:

    while(表达式){
        语句
    }

参数说明。

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

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

说明

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

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

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

例如,应用while语句输出1~10这10个数字的代码如下:

    01  var i = 1;                   //声明变量
    02  while(i<=10){                //定义while语句
    03      document.write(i+"\n");  //输出变量i的值
    04      i++;                     //变量i自加1
    05  }

运行结果为:

    1 2 3 4 5 6 7 8 9 10

注意

在使用while语句时,一定要保证循环可以正常结束,即必须保证条件表达式的值存在为false的情况,否则将形成死循环。

【例3.06】运动员参加5000米比赛,已知标准的体育场跑道一圈是400米,应用while语句计算出在标准的体育场跑道上完成比赛需要跑完整的多少圈。代码如下:(实例位置:资源包\源码\03\3.06)

    01  <script type="text/javascript">
    02  var distance=400;                //定义表示距离的变量
    03  var count=0;                     //定义表示圈数的变量
    04  while(distance<=5000){
    05     count++;                      //圈数加1
    06     distance=(count+1)*400;                            //每跑一圈就重新计算距离
    07  }
    08  document.write("5000米比赛需要跑完整的"+count+"圈");  //输出最后的圈数
    09  </script>

运行本实例,结果如图3.12所示。

图3.12 输出5000米比赛的完整圈数

3.2.2 do…while语句

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

    do{
       语句
    } while(表达式);

参数说明。

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

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

说明

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

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

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

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

注意

do…while语句结尾处的while语句括号后面有一个分号“;”,为了养成良好的编程习惯,建议读者在书写的过程中不要将其遗漏。

例如,应用do…while语句输出1~10这10个数字的代码如下:

    01  var i = 1;                   //声明变量
    02  do{                          //定义do...while语句
    03      document.write(i+"\n");  //输出变量i的值
    04      i++;                     //变量i自加1
    05  }while(i<=10);

运行结果为:

    1 2 3 4 5 6 7 8 9 10

do…while语句和while语句的执行流程很相似。由于do…while语句在对条件表达式进行判断之前就执行一次循环体,因此do…while语句中的循环体至少被执行一次,下面的代码说明了这两种语句的区别。

    01  var i = 1;                        //声明变量
    02  while(i>1){                       //定义while语句,指定循环条件
    03      document.write("i的值是"+i);  //输出i的值
    04      i--;                          //变量i自减1
    05  }
    06  var j = 1;                        //声明变量
    07  do{                               //定义do...while语句
    08      document.write("j的值是"+j);  //输出变量j的值
    09      j--;                          //变量j自减1
    10  }while(j>1);

运行结果为:

    j的值是1

【例3.07】使用do…while语句计算1+2+…+100的和,并在页面中输出计算后的结果。代码如下:(实例位置:资源包\源码\03\3.07)

    01  <script type="text/javascript">
    02  var i = 1;                          //声明变量并对变量初始化
    03  var sum = 0;                        //声明变量并对变量初始化
    04  do{
    05     sum+=i;                          //对变量i的值进行累加
    06     i++;                             //变量i自加1
    07  }while(i<=100);                     //指定循环条件
    08  document.write("1+2+…+100="+sum);  //输出计算结果
    09  </script>

运行本实例,结果如图3.14所示。

图3.14 计算1+2+…+100的和

3.2.3 for语句

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

    for(初始化表达式;条件表达式;迭代表达式){
        语句
    }

参数说明。

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

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

 迭代表达式:用来改变循环变量的值,从而控制循环的次数,通常是对循环变量进行增大或减小的操作。

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

说明

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

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

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

例如,应用for语句输出1~10这10个数字的代码如下:

    01  for(var i=1;i<=10;i++){      //定义for循环语句
    02      document.write(i+"\n");   //输出变量i的值
    03  }

运行结果为:

    1 2 3 4 5 6 7 8 9 10

在for循环语句的初始化表达式中可以定义多个变量。例如,在for语句中定义多个循环变量的代码如下:

    01  for(var i=1,j=6;i<=6,j>=1;i++,j--){
    02      document.write(i+"\n"+j);        //输出变量i和j的值
    03      document.write("<br>");          //输出换行标记
    04  }

运行结果为:

    1 6
    2 5
    3 4
    4 3
    5 2
    6 1

注意

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

    01  for(i=1;i>=1;i++){  //定义for循环语句
    02      alert(i);       //输出变量i的值
    03  }

为使读者更好地了解for语句的使用,下面通过一个实例来介绍for语句的使用方法。

【例3.08】应用for循环语句计算100以内所有奇数的和,并在页面中输出计算后的结果。代码如下:(实例位置:光盘\源码\03\3.08)

    01  <script type="text/javascript">
    02  var i,sum;                             //声明变量
    03  sum = 0;                               //对变量初始化
    04  for(i=1;i<100;i+=2){
    05     sum=sum+i;                          //计算100以内各奇数之和
    06  }
    07  alert("100以内所有奇数的和为:"+sum);  //输出计算结果
    08  </script>

运行程序,在对话框中会显示计算结果,如图3.16所示。

图3.16 输出100以内所有奇数的和

3.2.4 循环语句的嵌套

在一个循环语句的循环体中也可以包含其他的循环语句,这称为循环语句的嵌套。上述3种循环语句(while循环语句、do…while循环语句和for循环语句)都是可以互相嵌套的。

如果循环语句A的循环体中包含循环语句B,而循环语句B中不包含其他循环语句,那么就把循环语句A叫作外层循环,而把循环语句B叫作内层循环。

例如,在while循环语句中包含for循环语句的代码如下:

    01  var i,j;                                //声明变量
    02  i = 1;                                  //对变量赋初值
    03  while(i<4){                             //定义外层循环
    04      document.write("第"+i+"次循环:");  //输出循环变量i的值
    05      for(j=1;j<=10;j++){                 //定义内层循环
    06          document.write(j+"\n");         //输出循环变量j的值
    07      }
    08      document.write("<br>");             //输出换行标记
    09      i++;                                //对变量i自加1
    10  }

运行结果为:

    第1次循环:1 2 3 4 5 6 7 8 9 10
    第2次循环:1 2 3 4 5 6 7 8 9 10
    第3次循环:1 2 3 4 5 6 7 8 9 10

【例3.09】用嵌套的for循环语句输出乘法口诀表。代码如下:(实例位置:资源包\源码\03\3.09)

    01  <script type="text/javascript">
    02  var i,j;                                //声明变量
    03  document.write("<pre>");                //输出<pre>标记
    04  for(i=1;i<10;i++){                      //定义外层循环
    05     for(j=1;j<=i;j++){                   //定义内层循环
    06        if(j>1) document.write("\t");     //如果j大于1就输出一个Tab空格
    07        document.write(j+"x"+i+"="+j*i);  //输出乘法算式
    08     }
    09     document.write("<br>");              //输出换行标记
    10  }
    11  document.write("</pre>");  //输出</pre>标记
    12  </script>

运行本实例,结果如图3.17所示。

图3.17 输出乘法口诀表