JavaScript流程控制语句.doc_第1页
JavaScript流程控制语句.doc_第2页
JavaScript流程控制语句.doc_第3页
JavaScript流程控制语句.doc_第4页
JavaScript流程控制语句.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 流程控制语句JavaScript程序是由若干个语句组成的,每一个语句以分号作为结束符。语句可以很简单,也可以很复杂。其中,改变程序正常流程的语句称为控制语句。流程控制语句是用来控制程序中各语句执行顺序的语句,是程序中基本却又非常关键的部分。流程控制语句可以把单个语句组合成有意义的、能完成一定功能的小逻辑模块。本章内容包括:q 顺序控制语句;q 选择控制语句;q 循环控制语句;q 其他流程控制语句。通过本章学习,读者应该对几种流程控制语句有很深的理解,并可以利用这几种流程控制语句编写简单的程序。5.1 顺序控制语句JavaScript语言中,顺序控制语句是最简单的语句。其有如下特点:所有语句按照一定的顺序执行,每一条语句只执行一遍,不重复执行,也没有语句不执行。JavaScript语言中的顺序控制语句包括表达式语句,函数调用语句,空语句和复合语句等。5.1.1 表达式语句表达式后面跟一个分号就构成了一个表达式语句。最常见的表达式语句为赋值语句。赋值语句是在一个赋值表达式后跟一个分号形成的,程序中很多计算都由赋值语句完成。【示例5-1】演示几个表达式语句。其代码如下所示。var m=4;/把4赋给变量mvar n=”hello world”;/把字符串hello world赋值给ni=m+n;/把变量m和n的和赋值给变量i实际上,任何表达式都可以加上分号而成为语句。【示例5-2】变量i自增1。i+;/变量i的值加1注意:有些语句写法虽然是合法的,但是由于其没有保留计算结果,因而并没有实际意义。如以下代码:a-b;i+-1;5.1.2 函数调用语句函数将在本书第7章详细介绍,本节先介绍一下函数调用语句。函数调用语句是由函数调用加上分号组成的。其一般形式如下:函数名(实际参数列);执行函数语句是调用函数体,并把实际参数赋予函数定义中的形式参数,然后执行被调用函数体中的语句。如果是调用无参数函数,则“实参表列”可以没有,但是括号不能省略。如果实参表列包含多个实参,那么各个参数间需要用逗号隔开。实参与形参的个数应该相等,实参与形参按顺序对应,一一传递数据。【示例5-3】演示函数调用语句。其代码如下所示。function sum(x,y)/定义函数sum(x,y)return x+y;/返回变量x与y的和;a=2;b=2;c=sum(a,b);/调用函数sum(x,y),将值返回给c当然,函数是一段程序。这段程序可以存在于函数库中,也可能是由用户自己定义,当调用函数时会转到该段程序执行。但是函数调用是以语句的形式出现,它与前后语句之间的关系是顺序执行的。5.1.3 空语句空语句是指只有一个分号的语句,即:;空语句不产生任何动作。在程序中,如果不需要进行任何操作,但是从语句的结构上来说,必须有一个语句时就可以写一个空语句。5.1.4 复合语句在JavaScript语言中,可以用大括号把一些语句括起来,对外看作是一个语句,就构成一个复合语句。【示例5-4】演示用大括号括起来的复合语句。其代码如下所示。i=2;j=3;m=i*j;复合语句可以出现在允许语句出现的任何地方,在选择结构和循环结构中都会看到复合语句的用途。一般情况下,函数也是由复合语句构成的。5.2 选择控制语句除了简单的顺序控制语句外,JavaScript语言还定义了一些可以控制程序执行流程的语句,这些语句提供对控制流的选择和循环功能。在JavaScript语言中,语句默认都是顺序执行。但如果遇到选择或循环语句,顺序执行的规则就要发生改变。JavaScript语言中的选择控制语句有:if语句、ifelse语句和switch语句。5.2.1 if语句和ifelse语句if语句用于在程序中有条件地执行某一语句序列。if语句有多种形式的应用,下面分别介绍。1.双路条件选择双路条件选择语句是根据给定的条件进行判断,以决定执行哪一个分支程序段。程序控制结构如图5-1所示。if(条件表达式)语句序列1else语句序列2代码说明:q 首先判断条件表达式是否为真,如果为真就执行语句序列1;q 如果条件表达式为假,就执行语句序列2。图5-1 双路条件选择结构if和else都是JavaScript语言中的关键字,执行if语句时,程序先计算条件表达式的值,如果值为true,则执行语句序列1,如果值为false,则执行语句序列2。注意:分支语句序列如果只有一个语句,就不用大括号括起来;如果超过一个语句,分支中的所有语句都需要用大括号括起来,以便与分支之外的语句相区分。【示例5-5】演示双路条件语句序列。其代码如下所示。 双路条件语句序列 var m,n;/定义两个变量m,n m=23;/变量的赋值 n=35; if(mn)/条件语句 document.write(m大于n); else document.write(m小于n); 代码说明:q 首先定义初始化两个变量;q 然后判断两个变量的大小,如果mn,输出“m大于n”;q 如果mn为假,那么就输出“m小于n”。该程序的运行结果如图5-2所示。图5-2 双路条件语句序列2.单路条件选择单路条件选择就是判断该条件表达式是否为真,如果为真就执行括号中的语句序列,否则就不执行该语句序列。程序执行流程如图5-3所示。if(条件表达式)语句序列图5-3 单路条件选择这个结构只有if分支,没有else分支,如果条件表达式成立,则执行if分支语句,否则执行if语句之后的其他语句。【示例5-6】演示单路条件选择。其代码如下所示。 单路条件语句序列 var m,n;/定义两个变量 m=23;/变量的赋值 n=35; if(mn)/条件语句 document.write(m小于n); 代码说明:首先定义初始化两个变量m,n;然后判断表达式mn是否为真,如果为真就输出“m小于n”,为假就不做任何动作。该程序运行效果如图5-4所示。图5-4 单路条件选择3.多重条件选择结构多重条件选择是判断一个条件表达式是否为真,如果为真就执行语句序列,否则就判断下一个条件表达式是否为真。其结构如下所示。if(条件表达式1)语句序列1else if(条件表达式2)语句序列2else if(条件表达式n)语句序列nelse语句序列n+1这种条件选择结构对else if进行更多的条件判断,不同的条件对应不同的语句组。同时,if语句还可对语句进行嵌套。注意:使用if嵌套语句时,最好使用来确定相互的层次关系。多重条件选择结构如图5-5所示。图5-5 多重条件选择序列【示例5-7】一个多重条件选择序列,用来判断分数所在区间,输出相应结果。其代码如下所示。 多重条件语句序列 /*插入JavaScript语句*/ var score =78;/定义初始化变量score的值为78 if(score=90)/多重条件语句 document.write(A); else if(score=80) document.write(B); else if(score=70) document.write(C); else if(score70) document.write(D); 代码说明:q 首先定义初始化变量score;q 判断score=90是否为真,如果为真就输出“A”,为假就继续下一个判断;q 接着判断score=80是否为真,如果为真就输出“B”,为假就继续下一个判断;q 再接着判断score=70是否为真,如果为真就输出“C”,为假就继续下一个判断;q 最后判断score70是否为真,如果为真就输出“D”,为假不做任何动作。该程序输出结果为“C”。5.2.2 switch语句在多重条件选择的情况下,可使用ifelse结构来实现。但使用switch语句会使程序更加简练、清晰。switch语句式多分支的开关语句,常用于多重条件选择。它将一个表达式的值同许多其他值比较,并按比较结果选择执行下面的语句。switch语句的格式如下:switch(表达式)case 常量表达式1:语句序列1;break;case 常量表达式2:语句序列2;break;case 常量表达式n:语句序列n;break;default:语句序列n+1;break;switch语句的执行顺序是:q 先计算switch语句中表达式的值;q 然后在case语句中寻找与该值相等的常量表达式,并以此作为入口标号,由此开始顺序执行。q 如果没有找到相等的常量表达式,则从default:开始执行。使用switch语句要注意以下问题:q 表达式可以是字符型或枚举型表达式;q 各常量表达式的值不能相同,但他们在switch语句中出现的次序不影响最后的执行结果;q 每个case分支可以有多条语句,不必用;q 若干分支需要执行相同的操作时,可以使多个case分支共用一组语句。q 每个case语句只是一个入口标号,并不能确定执行终止点,因此每个case分支的最后可以加break语句,用来结束整个switch结构,否则会从入口点开始一直执行到switch结构结束点。【示例5-8】演示一个switch语句。其代码如下所示。 switch语句 /*插入javascript代码*/ var score =m;/定义初始化变量score的值为字符串m switch(score)/判断score的值 case m:/如果是“m”,就执行以下语句 document.write(A); break; case n:/如果是“n”,就执行以下语句 document.write(B); break; default:/默认执行以下语句 document.write(default); 代码说明:q 该程序先定义初始化变量score赋值为m;q switch语句中如果score的值为m则输出A;该程序运行结果如图5-6所示。图5-6 switch语句5.3 循环语句循环语句是在一定条件下,反复执行某段程序的控制结构,被反复执行的语句序列称为循环体。JavaScript语言中有3种常用的循环语句:for语句、while语句、dowhile语句,除此之外还有label语句,break语句,continue语句。本节将详细讲解这几种循环语句。5.3.1 for语句for语句通常用于预先知道循环次数的情况,其一般语法格式如下:for(表达式1;表达式2;表达式3)代码块其中表达式1可以是一个初始化语句,一般用于对一组变量进行初始化或赋值。表达式2用作循环的条件控制,是一个条件或逻辑表达式,当其值为true时,继续下一次循环,当其值为false时,则终止循环。表达式3在每次循环结束后执行,一般用于改变控制循环的变量。代码块在表达式2为true时执行。for语句的具体执行过程是这样的:q 执行表达式1;q 计算表达式2的值;q 如果表达式2的值为true,先执行后面的语句,再执行表达式3,然后转向步骤1;如果表达式2的值为false,则结束整个for循环。【示例5-9】使用for语句循环输出i的值。其代码如下所示。 for语句 /*插入JavaScript代码*/ for(var i=0;i10;i+)/for循环语句 /*变量i的初始值为0,每执行一次就自增1,直至i的值到了10就终止执行该语句*/ document.write(第,i+1,次循环中i的值为:,i,);/输出i,是换行符 代码说明:q 该程序中i的初始值为0,只要当i10,就继续下一次循环,循环结束后,i自增1。q 该程序循环输出10个i的值。该程序的运行效果如图5-7所示。图5-7 for语句5.3.2 while语句while语句的一般语法格式如下:while(条件表达式)循环体当条件表达式的运算结果为true时,则重复执行循环体。每执行一次循环体后,就会重新计算一次条件表达式,当该表达式的值为false时,while循环结束。循环体可以是单个语句,也可以是复合语句块。while语句的执行流程如图5-8所示。图5-8 while语句的执行流程【示例5-10】演示while语句。其代码如下所示。while语句 var i=1; while(i6)/while语句 /*当i6时,就不断的执行以下语句*/ document.write(JavaScript,i,);/输出JavaScripti i+; 代码说明:q 首先定义一个变量i;q 该程序中只要当i小于6,就会循环执行输出语句,并将i自增1。该程序运行结果如图5-9所示。图5-9 while语句5.3.3 dowhile语句dowhile语句的一般语法形式如下:do语句;while (条件表达式);do-while语句每一次循环执行一次语句,然后计算条件表达式是否为true,如果是则继续执行循环,否则结束循环。dowhile循环中的语句至少会执行一次,这点是与while语句不同的,而while语句当条件第一次不满足时,语句一次也不能被执行。dowhile语句的执行流程如图5-10所示。图5-10 dowhile语句的执行流程与while语句一样,在使用dowhile语句时也要注意在代码块中一定要能够改变循环条件中的变量,dowhile语句的一般表达式有以下两个步骤:(1) 执行循环中的代码块;(2) 判断循环条件是否为真,如果循环条件为真,则返回步骤(1),继续执行循环,如果循环条件为假,则跳出循环。【示例5-11】定义dowhile语句,当i6时循环输出i。其代码如下所示。do.while语句 var i=1; do /dowhile语句 document.write(JavaScript,i,); i+; while(i6) 代码说明:q 首先定义一个变量i,并赋值为1;q 然后使用dowhile语句,当i6时,输出“JavaScripti”。该程序的执行结果如图5-11所示。图5-11 dowhile语句5.3.4 label语句label语句的使用方式如下所示:label:代码块label语句只是在代码块之前加上一个标识,这样在程序中的其他语句中可以引用这个标识。一般在循环中,break语句和continue语句可以通过label语句跳出或终止本轮循环。5.3.5 break语句break语句是提供无条件跳出循环结构或switch语句的功能。一般,break语句是单独使用的。有时也可在其后面加一个语句标号,以表明跳出该标号指定的循环体,然后执行循环体后面的代码。【示例5-12】演示如何使用break语句。其代码如下所示。 break语句 /*插入JavaScript代码*/ for(i=1;i10;i+)/for循环语句 /*循环9次*/ document.write(i=,i,); /*当i=5时,跳出循环*/ if(i=5) break;/break语句跳出循环 代码说明:q 该程序中for语句循环输出i的值;q 当i等于5时,跳出循环。【示例5-12】的效果如图5-12所示。图5-12 break语句break语句还有另外一种使用方式:break label。在使用label的情况下,执行到break label立即跳出label标识的代码块。【示例5-13】用一个age变量记录了人的年龄,程序在页面上显示年龄,并且,当年龄小于25时,显示一条警告信息:young people。其代码如下所示。 break label语句 age=15; largeage:/label语句 /*判断age=25是否为真,如果为真就break largeage语句,否则继续执行下面代码。 if(age=25) break largeage; document.write(young peoples age is:);/输出字符串 document.write(age);/输出age 代码说明:q 当变量age大于等于25时,跳出largeage标识的代码块,不再显示young peoples age。q 当变量age小于25时,输出young peoples age。该程序的效果如图5-13所示。图5-13 break label语句一般使用break语句时,只能跳出当前循环,而在多重嵌套循环中,有时需要跳出多重循环,直接在使用break label方式的情况下,可以直接在多重嵌套循环中跳出外层循环。5.3.6 continue语句continue语句也用于循环语句,其类似于break语句,但它不是结束循环,而是结束循环语句的当前一次循环,接着执行下一次循环。在while和dowhile循环结构中,执行控制权转至条件表达式的判断,在for结构中,转去执行表达式2。【示例5-14】演示如何使用continue语句。其代码如下所示。 break语句 /*插入JavaScript代码*/ for(i=1;i10;i+)/for循环 /*如果i能整除2,就跳出循环 if(i%2=0) continue;/continue语句跳出循环 document.write(i=,i,); 代码说明:q for语句循环执行10次,当i%2恒等于0时,跳出本次循环,执行下一次循环;q 然后程序再输出i的值。【示例5-14】的效果如图5-14所示。图5-14 continue语句5.4 其他流程控制语句JavaScript语言还提供了其他一些控制语句。如forin语句,with语句,注释,return语句等。JavaScript语言中的return语句用于函数中,在函数结束前通过return语句,并返回值给调用函数的语句。5.4.1 forin语句JavaScript语言中的forin语句的一般表达式如下所示:for(变量in对象)代码块JavaScript语言是一种基于对象的语言,forin是循环语句在对象上的一种应用方式。在该语句中,变量将会列出对象的每一个属性。5.4.2 with语句with语句的一般表达式如下所示:with(对象)代码块JavaScript语言中的with语句用于声明代码块中的默认对象。代码块可以直接使用with语句声明对象的属性和方法,而不用写出该属性和方法的完整应用。如果在代码块中有若干语句需要使用同一对象的属性和方法,使用with语句后,只需写一次该对象的完整引用,然后就可在代码块中直接使用该对象的属性和方法,这样可以极大减少代码编写的工作量。5.5 本章实例1使用ifelse语句判断一个人是否通过驾照理论考试。(驾照理论考试分数线为90分)创建及运行程序的步骤如下所示。(1)创建一个htm文件。(2)在该文件中输入代码;(3)保存,打开执行该htm文件。程序的结构如下所示。q 首先定义一个变量driverScore用来保存考试成绩;q 然后建立一个函数对成绩进行判断;q 然后定义初始化某人的考试成绩;q 最后调用函数对其成绩进行判断。该程序参考代码如下: 第5章本章实例 var driverScore; function driver(driverScore) if(driverScore=90) document.write(恭喜你,通过了驾照理论考试!); else document.write(很遗憾,您需要再考一次!); var JackScore=99; driver(JackScore); 该程序执行结果如图5-15所示。图5-15 本章实例5.6 上机实践1使用while语句输出50的阶乘。该程序参考代码如下: var i=1;/定义初始化变量i var multipl=1;/定义初始化变量multipl while(i=20)/判断i是否小于等于20 multipl*=i;/求i的连乘 i+; /*输出20的阶乘*/ document.write(20的阶乘为:+multipl);该程序执行结果如图5-16所示。图5-16 上机实践12创建一个函数,使用switch语句判断表达式(8-2)的值,并输出结果。参考代码如下:var bsd;/定义一个变量bsd/*创建一个函数用来判断变量bsd的值*/function jisuan(bsd)/建立一个函数判断bsd的值转到相应的操作 switch(bsd)/switch语句,判断bsd的值 case 1:/如果bsd的值为1,就输出bsd的值。document.write(值为:+bsd); break; case 2:/如果bsd的值为2,就输出bsd的值。 document.write(值为:+bsd); break; case 3:/如果bsd的值为3,就输出bsd的值。 document.write(值为:+bsd); break; case 4:/如果bsd的值为4,就输出bsd的值。 document.write(值为:+bsd); break; case 5:/如果bsd的值为5,就输出bsd的值。 document.write(值为:+bsd); break; case 6:/如果bsd的值为6,就输出bsd的值。 document.write(值为:+bsd); break; case 7:/如果bsd的值为7,就输出bsd的值。 document.write(值为:+bsd); break; case 8:/如果bsd的值为8,就输出bsd的值。 document.write(值为:+bsd); break; case 9:/如果bsd的值为9,就输出bsd的值。 document.write(值为:+bsd); default:/默认输出值超出计算范围 document.write(值超出计算范围); break; var a=8;/定义初始化变量a=8 var b=2;/定义初始化变量b=2 var c=a-b;/用变量c来保存a-b的值 document.write(c+);/输出c的值 jisuan(c);/调用函数jisuan()该程序运行结果如图5-17所示。图5-17 上机实践33使用break语句,计算95以内任意数的和。其参考代码如下: var bsd; /*创建函数jisuan()*/ function jisuan(bsd) var begin=1; var sum=0; /*计算bsd内数的连和*/ while(begin95,就跳出循环*/ if(begin-5)90) break; if(bsd95) document.write(bsd+以内整数的和为:+sum+); else document.write( 95以内的整数和为:+sum+); jisuan(100); jisuan(65);该程序执行结果如图5-18所示。图5-18 上机实践34求100到200之间的全部素数。参考代码如下所示: var m; var i; var k; var n=0; for(m=101;m=200;m=m+2) Math.round(x)表示取x的整数值 k=Math.round(Math.sqrt(m); for(i=2;i=k+1) document.write(m+ ); n=n+1; if(n%5=0) document.write(); document.write();该程序运行结果如图5-19所示。图5-19 上机实践45把1-500之间的不能被2整除的数输出。参考代码如下: var n; for(n=1;n=500;n+) if(n%2=0) continue; document.write(n+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论