4.5 跳转语句
在循环语句的循环体中,JavaScript允许在满足一定条件的情况下,直接跳出循环语句。或在满足一定条件的情况下开始一个新的循环,这种操作就需要用到跳转语句。JavaScript中的跳转语句包括break语句与continue语句两种。
4.5.1 break语句
break语句的作用是跳出循环或结束switch语句,其语法代码如下所示:
break;
【实例4.13】有关break语句的使用方法请看以下代码,注意加粗的文字:
01 <html> 02 <head> 03 <title>break语句</title> 04 <script type="text/javascript"> 05 <!-- 06 for (var i=0,j=10,k=2;i<4;i++,j--,k++) 07 { 08 document.write("i = " + i + "<br>"); 09 document.write("j = " + j + "<br>"); 10 document.write("k = " + k + "<br><br>"); 11 if (k==3) 12 { 13 break; 14 } 15 } 16 --> 17 </script> 18 </head> 19 <body> 20 </body> 21 </html>
【代码说明】在本例中,for循环只进行了两次,就终止了。本例的执行过程如下所示:
(1)执行第6行的“var i=0, j=10, k=2;”初始化变量i、变量j和变量k。
(2)判断“i<4”是否返回true。此时变量i等于0,因此返回true,进入for循环。
(3)输出变量i、变量j和变量k的值。
(4)判断“k==3”是否返回true。此时变量k等于2,返回false,因此没有执行break语句。
(5)执行“i++, j--, k++”语句。
(6)再次判断“i<4”是否返回true。此时变量i等于1,因此返回true,再次进入for循环。
(7)输出变量i、变量j和变量k的值。
(8)判断“k==3”是否返回true。此时变量k等于3,返回true,此时执行break语句,跳出整个for循环。因此,本例中的循环体只执行了两次。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample13.htm”里的内容,其运行结果如图4.11所示。
【实例4.14】在JavaScript中,循环语句也是可以嵌套的,在嵌套的循环语句中,break语句只能跳出离该语句最近一层的循环语句,而不是所有循环语句。请看以下代码,注意加粗的文字:
01 <html> 02 <head> 03 <title>break语句</title> 04 <script type="text/javascript"> 05 <!-- 06 var i = 0; 07 while (i<4) 08 { 09 document.write("i = " + i + "<br>"); 10 for (var j=0;j<4;j++) 11 { 12 document.write("j = " + j + "<br>"); 13 if (j==1) 14 { 15 break; 16 } 17 } 18 document.write("<br>"); 19 i++; 20 } 21 --> 22 </script> 23 </head> 24 <body> 25 </body> 26 </html>
【代码说明】在本例中可以看出,while循环语句一共执行了4次,而for语句在每次while语句的循环里只执行了2次,这是因为for语句在执行2次时,break语句就跳出了for循环,而不是while循环。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample14.htm”里的内容,其运行结果如图4.12所示。
事实上,JavaScript也可以让break语句跳出到一个指定的循环之外,此时要使用到标签语句,有关标签语句在后续章节里还会详细介绍。跳出到指定循环外的break语句的语法代码如下所示:
break 标签;
【实例4.15】有关跳出到指定循环外的break语句的使用方法请看以下代码,注意加粗的文字:
01 <html> 02 <head> 03 <title>break语句</title> 04 <script type="text/javascript"> 05 <!-- 06 document.write("准备开始循环<br>"); 07 outloop: 08 for (var i=0;i<4;i++) 09 { 10 document.write("i = " + i + "<br>"); 11 for (var j=0;j<4;j++) 12 { 13 document.write("j = " + j + "<br>"); 14 if (j==1) 15 { 16 break outloop; 17 } 18 } 19 document.write("<br>"); 20 } 21 document.write("准备结束循环<br>"); 22 --> 23 </script> 24 </head> 25 <body> 26 </body> 27 </html>
【代码说明】在本例中可以看出,第一个for语句的循环体只执行了一次,而第二个for语句的循环体也只执行了两次。这是因为在第二个for语句中的break语句直接跳出了标签名为outloop的第一个for语句。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample15.htm”里的内容,其运行结果如图4.13所示。
4.5.2 continue语句
continue语句与break语句类似,也可以跳出一次循环。但与break语句不同的是,continue语句只会跳出一次循环,进入下一次循环,而break语句跳出循环之后结束了整个循环。continue语句的语法代码如下所示:
continue;
【实例4.16】有关continue语句的使用方法如下所示,注意加粗的文字:
01 <html> 02 <head> 03 <title>continue语句</title> 04 <script type="text/javascript"> 05 <!-- 06 for (var i=0,j=10;i<3;i++,j--) 07 { 08 document.write("i = " + i + "<br>"); 09 if (j==9) 10 { 11 document.write("<br>"); 12 continue; 13 } 14 document.write("j = " + j + "<br><br>"); 15 } 16 --> 17 </script> 18 </head> 19 <body> 20 </body> 21 </html>
【代码说明】在本例中,for循环只进行了两次就终止了。本例的执行过程如下所示:
(1)执行“var i=0, j=10”,初始化变量i和变量j的值。
(2)判断“i<3”是否返回true,此时变量i等于0,返回true,开始进入循环体。
(3)输出变量i的值。
(4)判断变量j是否等于9,此时变量j的值为10,返回false,跳过if语句中的语句块。
(5)输出变量j的值。
(6)变量i自加1,变量j自减1。此时变量i的值为1,变量j的值为9。
(7)第二次判断“i<3”是否返回true,此时变量i等于1,返回true,开始进入循环体。
(8)输出变量i的值。
(9)判断“j==9”是否返回ture,此时变量j等于9,返回true,执行if语句中的语句块。
(10)输出一个换行,并执行continue语句,跳出本次循环,开始下一次循环。
(11)变量i自加1,变量j自减1。此时变量i的值为2,变量j的值为8。
(12)判断“i<3”是否返回true,此时变量i等于2,返回true,开始进入循环体。
(13)输出变量i的值。
(14)判断变量j是否等于9,此时变量j的值为8,返回false,跳过if语句中的语句块。
(15)输出变量j的值。
(16)变量i自加1,变量j自减1。此时变量i的值为3,变量j的值为7。
(17)判断“i<3”是否返回true,此时变量i等于3,返回false,结束整个for循环。
在本例中可以看出,一旦执行了continue语句,在continue语句之后的所有语句就不再执行,并开始下一次循环。
continue语句可以用在所有循环语句中,但是不同的循环语句的处理方法有所不同。4种不同的循环语句的处理方式如下所示:
■在for语句中,结束当次循环后,执行改变变量表达式,再根据逻辑表达式返回的结果判断是否进入下一次循环。
■在while语句中,结束当次循环后,JavaScript会根据逻辑表达式返回的结果来判断是否进入下一次循环。
■在do...while语句中,结束当次循环后,JavaScript会跳至do...while语句的底部,根据逻辑表达式返回的结果来判断是否进入下一次循环。
■在for...in语句中,结束当次循环后,JavaScript会将下一个属性名赋值给变量,开始下一次循环。
与break语句一样,在嵌套的循环语句中,continue只能跳出离该语句最近一层的循环语句,如果要跳出指定的循环语句,可以使用以下语句:
continue 标签;
由于该语句的使用方法和break语句十分相似,在此就不再赘述了。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample16.htm”里的内容,其运行结果如图4.14所示。