




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元八 VBScript程序控制单元八 VBScript程序控制学习目标VBScript的程序构成;过程与函数的定义、调用与参数传递;判断结构与选择结构的使用;循环结构程序的编制;错误的处理。世界上的事物总是千变万化的,也是相互联系的。因此我们在处理任何一件事务时总会面临着判断与选择;有时候我们还不得不重复着某些事务,程序的设计也同样如此。前面章节我们所学习的程序应该说是非常简单的,大多数程序的共同特点是脚本运行时是从上到下顺序执行程序中的所有指令,总是终止于最后一行。事实上,顺序结构只是VBScript程序结构中的一种,与其他语言一样,VBScript也具备三种基本的程序结构:顺序结构、分支结构与循环结构。同时过程与函数又是构成VBScript脚本的基本逻辑单元,所以要想真正学会学好VBScript编程,必须要学会如何使用这些程序结构对程序进行控制。8.1 VBScript过程与函数实例说明 移动的文字图8-1 文字的移动在网页设计软件中也具备制作滚动字幕的功能,但利用VBScript也可以实现。网页看起来很简单,单击“试试看”按钮后,标题“友缘相聚”即会自左向右移动,到达边缘后又会回到右侧继续移动。移动过程中当鼠标指向该文字后,文字会重新回到起始位置再移动 (图8-1)。代码分析代码如VBS08_01.htm所示,这是一个比较复杂的脚本。文字对象使用Div来定义,同时定义了一些显示样式,名称为divMove。整个脚本代码由两个过程和一个函数构成:函数Move()实现对象divMove(待移动的文字对象)的移动,移动实际上是通过不断地改变divMove对象的posleft属性来实现的: divMove.style.posleft=divMove.style.posleft-10文字的循环移动中使用了Windows对象的setTimeOut方法,每隔0.05秒调用函数Move()自身一次。代码中使用的判断结构来实现文字移动到边缘时的复位。过程Button1_onClick响应按钮Button1单击时的过程脚本,该脚本实际上只有一句,启动文字移动过程。过程divMove_onMoveOver鼠标指向divMove文字对象时的过程脚本,其目的是将divMove对象复位重新开始移动。本网页中还使用了表单对象,用于定义一个命令按钮以启动文字的移动。VBS08_01.htm代码(移动的文字)移动的文字友缘相聚function move() If divMove.style.posleft=0 then divMove.style.posleft=700 and divMove.style.posleft=divMove.style.posleft+0 Else divMove.style.posleft=divMove.style.posleft-10End ifSettimeout move(),50end functionsub divMove_onmouseover divMove.style.left=700 divMove.style.posleft=divMove.style.posleft+nullend subsub button1_onclickSettimeout move(),50end sub相关知识过程与函数的定义与调用知识点8-1-1函数或过程是VBScript程序的基本组成单元,它一方面可以使程序有清晰的结构;另一方面也提高了程序的效率。从上面的实例可以看出,无论是函数还是过程都具有一定的结构。函数与过程必须先定义后调用,而且一经定义即可多次调用,提高了脚本的效率。过程的定义:Sub 过程名(参数1,参数2,参数n)过程体End Sub函数的定义:Function 函数名(参数1,参数2,参数n)函数体函数名=表达式End Function在进行过程与函数的定义时要注意以下几点:(1)过程名与函数名必须符合VBScript标识符的有关规定(2)与内置函数一样,函数与过程都可以带若干个参数,参数间以逗号隔开,这些参数代表的是传递给过程或函数进行处理的数据,称为形式参数(形参)。当然也可以不带参数,此时“()”可以省略。(3)在进行函数定义时,一般需要有“函数名=表达式”,将运算的结果送到函数名中以返回给调用程序。(4)由于VBScript也是属于面向对象的语言,因此也有许多事件、方法是以过程的形式出现的,对于这些过程其名称与参数都是固定的,用户不能随便修改,如实例中的divMove_onmouseover过程。过程的调用:过程的调用基本有两种方式:(1) Call 过程名(参数1,参数2,参数n)(2) 过程名 参数1,参数2,参数n对于事件过程的调用与一般的过程调用不同,它是与事件联系在一起的,只有当该事件发生时,相应的事件过程才会执行。关于事件过程详见单元九。过程调用也属于VBScript语句,因此也应该放置在脚本之间。调用语句中出现的参数通常称为实际参数(实参),其与形参应保持一一对应的关系:位置、类型、个数。函数的调用:函数的调用与VBScript的内置标准函数的调用方法相同,即函数只能出现在表达式中,不能以单独的语句形式出现。参数的传递与过程调用相同。VBS08_02.htm是一个过程与函数使用的实例。这是一个可以随机生成10以内加减的小学生算术题的程序。整个程序由一个主控程序、两个函数与一个过程构成。rndNumber随机生成一个10以内的整数,rndOperator随机生成加法或减法算符,showMsg(strMsg)显示所生成的算式。主控程序首先调用rndNumber与rndOperator函数以生成两个操作数与算符,接着要判断所生成算式的合法性(运算结果不能为负数),如不合法则重新生成(通过一个循环结构)。生成合法的算式后,再调用showMsg过程显示在页面上。参数的传递知识点8-1-2在进行函数或过程定义时,可以包括一个或多个参数,这些参数是提供给过程或函数进行处理的数据。但由于在函数或过程在被调用之间并不知道这些参数的具体值,只有在被调用时才能确定,因此,将这些参数称为“形式参数”(形参)。当然形式参数并不是必需的,有时候也可以定义无参数的过程或函数。例如在VBS08_02.htm中,定义的信息显示过程:sub showMsg(strMsg)中的strMsg即为一个形式参数。当一个过程或函数在定义时使用了形式参数,那么在调用该过程(函数)时就必须提供相应的数据,这些数据通常被称为“实际参数”(实参)。如:showMsg str1中的str1即为实参。实参可以是具体的值,也可以是表达式。VBS08_02.htm代码(小学生算术题)小学算术题function rndNumberrandomizerndNumber=int(10*rnd)end functionfunction rndOperatordim rndOprandomizerndOp=int(2*rnd)if rndOp=1 then rndOperator=+elserndOperator=-end ifend functionsub showMsg(strMsg)document.write strMsgdocument.writeend subdim num1,num2,Op1,result,str1do num1=rndnumberop1=rndOperatornum2=rndnumberif op1=- then result=num1-num2elseresult=num1+num2end ifloop until result=0str1=str1 & num1 & op1 & num2 & =showMsg str1知识扩展在VBScript中参数的传递有两种方式:一种是值传递,另一种是地址传递。值传递是直接将参数的值传递给过程(函数),因此在过程(函数)中对该值的改变不会影响调用程序中的同变量的值;而地址传递是将参数的地址传递给过程(函数),在过程(函数)中对该变量值的任何改变都会反映到调用程序中,通过这种方式可以将过程(函数)处理的结果带回。如果使用了地址传递的参数传送方式,在进行定义时,形参前必须加上“ByRef”关键字。VBS08_03.htm代码(变量的作用域)变量的作用域Dim xx = 10Function Increment(lVar) Dim y lVar = lVar + 1 y=lvar Document.write 在函数Increment中Y的值是: & Y & Increment = lVarEnd FunctionFunction Decrement(lVar) lVar = lVar - 1 Decrement = lVarEnd Function变量作用域Dim yy = 20Document.Write X、Y现在的值分别是: & x & & y &Document.Write 通过Increment函数的X返回值是: & Increment(x) & Document.Write 通过Decrement函数的X返回值是: & Decrement(x) & Document.Write 现在的X值是: & x & Document.Write 现在的Y值是: & y & 变量的作用域知识点8-1-3先看一个实例,如VBS08_03.htm,程序运行结果如图8-2所示。请特别注意两个变量X、Y的变化情况:在函数定义之外首先定义了变量X、Y,然后将X的值传递到函数中进行处理。在函数Increment中又定义了一个同名变量Y,将lVar的值送到Y中并显示(12),此Y与函数之外的Y并不是同一个变量,在内存中有不同的内存单元。而由于X的值经过两次函数调用Increment(x)与Decrement(x),其值变成了11,该值被带回到调用程序的X中,调用程序中的Y的值并没有改变还是维持原来的20。由此实例可以看出,变量定义的位置不同其作用范围是不相同的。变量的作用范围也称为变量的作用域。在VBScript中有两种不同的作用域:如果在过程或函数中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为过程级变量,也称为局部变量。如果在过程之外脚本程序内声明变量,则该变量可以被 Script 中所有过程所识别,称为 Script 级变量或全局变量,它具有程序级作用域。变量存在的时间称为存活期。Script 级变量的存活期从被声明的一刻起,直到 Script 运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量(实例中的变量Y),这是因为每个局部变量只被声明它的过程识别。8.2 判断与选择实例说明在VBS07_09.htm实例中,在输入了用户名后,系统会显示其登录网站的时间并给出问候。现在对这个实例进行扩展,系统的问候可以根据不同的时间给出不同的问候,如图8-3所示。图8-2 变量作用域图8-3 条件语句使用代码分析VBS8_04.htm代码(条件语句使用)dim NameName=inputbox(请输入您的大名:,登录)document.write(现在的时间是: & date() & & time()document.write() h = hour(time) if h = 5 and h = 9 and h = 11 and h = 13 and h = 17 and h = 23 or h 5 then document.write 该休息了!晚安! document.write document.write(欢迎您: & Name & !光临本站!)代码的脚本部分如VBS08_04.htm所示。关键语句是其中的黑体部分,在输入登录的用户名后,系统将根据登录时的时间(小时值)判断使用合适的问候语。例如在9点至11点之间则显示“上午好”,如在17点到23点之间则显示“晚上好”等等。很显然,在代码中有六种不同的问候语,但程序在每次运行时只能显示其中的一条,也就是说这些语句并不是每一句都能被执行。实现这种功能的就需要使用判断结构(也称分支结构或条件结构)。相关知识判断语句知识点8-2-1日常生活中常常要根据实际情况作出各种各样判断,以便作出适当的决定。用自然语言来表达就是“如果,就,否则就”。VBScript作为一种编程语言也提供了类似的语句结构If语句。If语句有三种基本使用方法:(1)“如果就”格式(单一选择)请看下面的例子:Dim iMyNumberiMyNumber = InputBox(请输入1-100之间的任意一个数:)If iMyNumber = 1 And iMyNumber = 1 And iMyNumber = 1 And iMyNumber = 100 ThenMsgBox 你输入的数为: & iMyNumberElseMsgBox Hi,我说的是1-100!End If在程序中增加了Else结构,说明如果判断的条件不成立时所要执行的语句。此时根据用户实际输入的数,程序就有了两种选择:输入合法则显示输入的数;不合法则显示输入不合法的信息。If语句的书写有两种格式:(1)行格式:将IfThenElse写在一行上,省略End If,如:If i10 Then i=i-1 Else i=i+1一般只有当Then和Else后的语句非常简单时方可使用。(2)块格式:如上面的例子所示,这是一般的书写格式。读者也可以参见前一单元中的实例VBS07_10.htm,也使用了类似的结构。(3)多分支选择如果可能的情况不止两种,就需要使用多重判断结构了。实例VBS08_05.htm说明了这种结构的使用。脚本的功能是根据当前时间的不同来决定该做什么事情。首先通过time和hour函数取得当前时间的小时值送入变量i中;进入If的判断结构后,首先判断i的值是否等于8;如不等再分别判断是否等于11、12、17,只要有一个相等即执行该等式后的语句组;如i的值VBS8_05.htm代码(多重判断语句结构)function greeting()i=hour(time)If i = 8 thendocument.write(哈,工作刚开始.!)elseif i = 11 thendocument.write(饿了!)elseif i = 12 thendocument.write(Ah, 吃午饭罗!)elseif i = 17 thendocument.write(该下班回家啦!)elsedocument.write(我不知道是什么时间!)end ifend function多重判断语句/html一个也不匹配则直接执行else后面的语句组。整个程序写成一个函数greeting(),通过“”来直接调用。选择语句知识点8-2-2在VBScript中,能够多重判断有两种方法:一种是使用前述的If语句嵌套格式;第二种是使用Select Case语句(针对不同情况进行不同的选择)。前一种方法容易出错,一般并不使用,常用的是后一种语句。请看实例VBS08_06.htm,该实例判断今天是星期几。程序通过Weekday函数求出当前日期在一周中的序号并将其送到变量d中,然后进入Select Case语句结构,根据d的值依次与其后的若干个Case后面的判断式进行匹配,如正好相等或匹配,则执行该Case后的语句组;否则继续向下匹配,直到找到一个匹配项;如果一个都没有找到则执行Case Else后的语句组。在VB或VBA中,CASE后可以使用以下两种格式: 1 to 10代表某一范围 IS 关系运算 1与某一常量比较但在VBScript中不能使用!第一个Case后的“1,7”表示的是列举,变量d的值只要在列举值之一时,即算是匹配成功。如果变量的值与多个Case匹配成功,则只执行第一个匹配成功的语句组。VBS08_06.htm代码(情况选择语句的使用)d=weekday(date)select case d case 1,7 document.write(双休日!) case 2 document.write(星期一!) case 3 document.write(星期二!) case 4 document.write(星期三!) case 5 document.write(星期四) case else document.write(星期五!)end select8.3 循环图8-4 跟随鼠标跳动的文字实例说明跟随鼠标跳动的文字在网站上经常会看到在鼠标指针下跟随一些跳动的文字,显示效果如图8-4所示。代码如VBS08_07.htm所示。代码分析该程序比较复杂。为了能对鼠标后的文字进行控制,程序首先定义了嵌套的DIV对象,名为Text(i)的对象定义了每个文字为一个DIV对象,以便于单独进行控制。名为MyMove的DIV对象定义了整个文字的跳动范围。脚本程序中定义了两个数组变量,Direction(n)是决定文字跳动方向, AddValue(n)决定文字的速度,每个文字的跳动速度不同。脚本程序的主体是两个过程:Tim过程主要控制文字的上下跳动。通过判断text(i).style.posTop+text(i).style.posHeight=MyMove.style.posHeight的值是否为True来决定跳动的方向,如果为真则表示文字已经到了MyMove对象的底部,必须向上跳动。向上跳动实际上只是将每个文字的posTop加上相应的AddValue值。反之则向下跳动。由于需要对每个文字进行单独的控制,程序通过一个循环实现对四个文字的循环控制。Document_OnMouseMove过程是内置的鼠标移动触发的事件过程,用于控制文字跟随鼠标移动。这个过程通过改变MyMove对象的位置实现跟随鼠标的移动,在改变位置时不仅要考虑鼠标的当前位置(Window.Event.Y),还要考虑页面滚动后的位置变化(Document.Body.ScrollTop)。有关对象与事件的编程详见单元九的介绍。VBS08_07.htm代码(数组) 跳 动 文 字 注:text(0)代表的文字是跳 text(1)代表的文字是动 依此类推Dim MyTimer,Direction(3),AddValue(3) MyTimer是SetTimeOut的变量;Direction(n)是决定文字跳动方向, AddValue(n)是文字的速度AddValue(0)=4 跳每毫秒增加/减少PXAddValue(1)=6 动每毫秒增加/减少PXAddValue(2)=8 文每毫秒增加/减少PXAddValue(3)=10 字每毫秒增加/减少PXFor i=0 To 3 Direction(i)=Down每个文字的方向的初始值都是Down(向下)NextSub Window_OnLoad Tim 在读取网页时调用Tim()程序End SubSub Tim() For i=0 To 3 If text(i).style.posTop+text(i).style.posHeight=MyMove.style.posHeight Then Direction(i)=Up 如果text(i)的底碰到最底就向上移动 ElseIf text(i).style.posTop=0 Then Direction(i)=Down 如果text(i)的顶碰到最顶就向下移动 End If Next For i=0 To 3 If Direction(i)=Down Then 如果Direction(i)是Down则text(i)就向下移动 text(i).style.posTop=text(i).style.posTop+AddValue(i) ElseIf Direction(i)=Up Then如果Direction(i)是Up则text(i)就向上移动 text(i).style.posTop=text(i).style.posTop-AddValue(i) End If Next MyTimer=SetTimeOut(Tim(),50) 再调用一次Tim()程序End SubSub Document_OnMouseMove MyMove跟着鼠标移动 MyMove.Style.posTop=Window.Event.Y+Document.Body.ScrollTop MyMove.Style.posLeft=Window.Event.X+Document.Body.ScrollLeft + 5End Sub相关知识计数型循环ForNext知识点8-3-1快速重复执行某一段程序是计算机最为擅长的功能。有许多的任务需要重复执行的,如:统计1至100之间的奇数和,在网页上显示一个“九九乘法表”,或者通过计算机发出一系列的报警声等等。这些任务的实现离不开VBScript所提供的循环结构程序。VBScript中有三种不同类型的循环结构:ForNext、DoLoop和For EachNext。For循环通常用于重复执行的次数是已知的情况,其基本格式如下:For 变量=初始值 To 终止值 Step 步长值 语句组Next这个循环语句以For开始,Next结束。开始执行时,首先将初始值送到变量中,然后判断该变量的值是否已经超过终止值(如step为正数是大于,否则是小于),若已经超过则循环结束,否则执行循环体中的语句组。step是每次循环时变量变化的数值,它可正可负,缺省时为1。本次循环结束后,变量将加上步长step的值返回到循环开始再进行测试,直到变量的值超过终值,循环结束。在案例VBS08_07.htm中就使用了三个这样的循环结构。下例即为计算1至100之间的奇数和的语句:Dim Total,CounterTotal=0For Counter=1 to 100 Step 2Total=Total+CounterNextMsgBox 1至100之间的奇数和为: & TotalFor循环的循环次数可以通过初始值、终止值及步长值计算出来: INT(终止值-初始值)/步长值)+1由于循环变量的值是在循环过程中自动改变的,所以一般不要在循环的语句组中修改循环变量的值,以免引起循环次数的不准确。循环语句也可以嵌套使用,但在嵌套时必须注意内外循环之间绝对不能出现交叉的现象。实例VBS08_08.htm是显示九九乘法表的程序,该程序使用了两个For循环的嵌套,外层循环控制显示的行,内层循环控制显示的列。程序执行后的结果如图8-5所示。VBS08_08.htm代码(九九乘法表)For a=1 to 9For b=1 to aDocument.write a & & b & = & a*b & if b=a then document.write NextNext条件型循环DoLoop知识点8-3-2图8-5 显示九九乘法表For循环是针对重复的次数已知的情况,但在实际应用中存在许多事先并不知道次数的循环,其循环只是依据一定的条件。VBScript的Do循环正好可以适应这种情况。Dim iNumberDo iNumber = InputBox(Please enter a number.)Loop While Not IsNumeric(iNumber)MsgBox Thank you!上面的代码实现对用户输入信息的校验,要求用户只能输入数字,否则就需要重新输入(IsNumeric(iNumber)函数判断)。这种功能是通过Do.Loop来实现的,程序的执行流程如下:程序首先定义了一个变量iNumber,然后进入Do循环。在循环体内只有一句,通过InputBox函数将用户输入的值送到变量iNumber中。在Loop语句后跟随了一个While Not IsNumeric(iNumber)的判断条件,其含义是当Not IsNumeric(iNumber)为真时(iNumber中的内容不是数字时)继续循环,即要求用户重新输入。如果用户输入了数字,则Not IsNumeric(iNumber)返回false,条件不成立,循环结束。Do循环有两大类,四种形式,如图8-6所示。Do While 逻辑表达式循环体Loop(a)Do 循环体Loop While 逻辑表达式(b)Do Until 逻辑表达式循环体Loop(c)Do 循环体Loop Until 逻辑表达式(d)图8-6 Do循环的形式图中,(a)和(c)属于一大类,先测试循环的条件是否满足,如满足则执行循环体中的语句,否则直接退出循环,这一类循环也称为“当型”循环;(b)和(d)又属于另一类循环,先执行循环体内的语句,然后测试循环的条件是否满足,满足则继续循环,否则退出,这一类循环也称为“直到型”循环。很明显,当型循环可能不循环,而直到型循环至少循环一次。While和Until只能使用一个,其后都要跟随逻辑表达式。While(Until)既可以写在Do后面,也可以写在Loop后面,但不能两个后面都有。Do循环结构是通过循环条件来控制循环是否继续的。引导循环条件的有两种关键字:While和Until。这两个关键字的含义与其英文原意是相同的,即While是当其后的条件成立时(逻辑表达式返回True)循环继续;而Until是循环一直继续到其后的条件成立时为止,否则将一直循环。有些情况下,同一个问题用这四种形式都可以,但要注意逻辑表达式的区别。试看下例:Do Ans= InputBox(请输入“快乐”的英文)Loop Until Ucase(Ans)=HAPPYMsgBox 太棒了,你答对了 (b)Ans=InputBox(请输入“快乐”的英文)Do While Ucase(Ans)HAPPYMsgBox 不正确,请重新输入!Ans= InputBox(请输入“快乐”的英文)LoopMsgBox 太棒了,你答对了(a)程序功能是要求用户将“快乐”翻译成英文(大小写不限)(a)与(b)是两种最常用的形式,请读者再写出另外两种形式。所有的For循环结构均可改写成Do循环结构形式,但反之却不一定。数组循环For EachNext知识点8-3-3该循环结构主要用于对数组元素或集合元素进行处理。例如:dim names(2)names(0) = 张图8-7 For Each循环names(1) = 李names(2) = 王for each x in names document.write(x & )next从语句形式上看,它与ForNext循环语句类似,x为元素变量,names是事先定义好的数组(至少有一个元素)。执行时,首先对数组中的第一个元素执行循环体内的语句,然后依次对其它元素执行同样的操作,直到所有的元素都处理完毕。与ForNext循环不同的是其循环次数并不是由语句指定的,而取决于数组或集合中的元素个数。所以当不知道数组或集合中包含的元素个数时,使用该循环非常方便。VBS08_09.htm代码(For Each循环)For Each循环姓名:年龄:专业:For Each i in document.myfm.elementsdocument.write &  Next实例VBS08_09.htm可以显示出网页上表单内各个对象的名称,如图8-7所示。循环的强行退出知识点8-3-4有时候,在循环程序设计中我们需要提前终止循环,如在一个人名数组中查找指定的人名,如果找到了就不需要继续循环了。VBScript中无论是For循环还是Do循环都设置了强行退出循环的命令:对For循环是“Exit For”;对Do循环是“Exit Do”。VBS08_10.htm代码(强行退出循环)Do Ans=Inputbox(请输入一个数字:)if Ans= thenMsgBox 结束Exit DoElseif Ans50 ThenMsgBox 输入的数太大了!Elseif Ans50 ThenMsgBox 输入的数太小了!Elseif Ans=50 ThenMsgBox 输入正确!Exit DoEnd IfLoop实例VBS08_10.htm说明了强行退出循环的应用。请读者自行分析!特别注意:退出循环语句可以出现在循环体的任何位置,但总是和判断语句联系在一起的。8.4 错误处理与调试实例说明脚本代码的错误处理图8-8 错误处理图8-8显示了脚本程序代码对用户输入的信息进行校验,直到正确为止。要求用户输入一个非0数字,如果不是非0的数字,则根据情况给出不同的提示。程序本身的功能是做一个简单的除法,用户输入的数字作为除数。代码分析从VBS08_11.htm中可以看出,代码第一行采用了VBScript的标准错误处理语句On Error Resume Next,表示当出现错误时,系统并不停止,而是继续执行后面的语句。为了防止由于用户输入的错误(如:0或非数字的字符)而不能运行的错误,程序中通过IfElseIfEnd If结构对用户的输入进行判断,判断的方法非常简单,不再详述。相关知识VBScript的错误知识点8-4-1VBScript程序错误通常有三大类:(1)语法错误 语法错误是程序中最容易出现也是最好修改的错误。主要是由于键盘输入错误、命令格式不对、粗心大意等原因造成的。如关键字错、表达式不对、使用了全角的标点符号、函数或过程未定义、语句对不匹配等等。一般语法错误出现后,程序根本不能运行,同时一般在浏览器界面上会出现一个错误信息提示框(如图8-9所示的即为“Then”缺少或写错时的错误信息)。图8-9 语法错误提示VBS08_11.htm代码(错误处理)On Error Resume NextDim n, xn = 10 Dox = Inputbox(请输入一个数字:)If Not IsNumeric(x) Then Document.Write HI,我说请输入数字! & Elseif x=0 thenDocument.write 输入非法,不能为0 & Else y = n / x Document.Write y Exit DoEnd IfLoop(2)逻辑错误 逻辑错误实际上是算法上的错误,这种错误在编译和运行是无法发现的,但程序运行结束后所得到的却是错误的或并非预期的结果。这类错误最麻烦,也最难改正, 一般只能通过仔细检查程序代码并借助于调试工具来判断并加以排除。(3)运行错误 运行错误是指程序在运行代码时产生了错误而导致了运行的中断。这类错误往往是由于在指令代码中出现了一些非法的操作而引起的。例如试图打开一个不存在的文件、被0除、磁盘空间不足、使用了“要求变量声明”但变量未定义等等。当出现运行错误时,屏幕也会出现消息框 (图8-10即为被零除时的错误信息)。图8-10 “被零除”错误信息错误信息的显示时机根据错误性质的不同而不同,一般而言,在脚本装入编译时显示的错误信息是语法错误或运行错误;而当脚本装入完成程序正常运行却得不到预期的结果的肯定是逻辑错误。为了显示脚本的错误信息,需要对IE浏览器进行如下设置:在“工具”菜单的“Internet选项”的高级选项卡中,选中“显示每个脚本错误的通知”。清除“禁止脚本调试”将允许用户调试脚本代码。错误的预防与处理知识点8-4-2一个良好的脚本开发人员在设计脚本程序时首先要写出无语法错误的脚本,更重要的是在脚本开发时,更重要的是必须充分对程序运行时可能出现的错误作出估计并进行完善的错误处理代码开发。如VBS08_11.htm中的脚本就对程序在运行时可能出现的错误进行了比较好的处理。VBScript的错误处理体系包含两个重要的要素:一是On Error语句;二是Err对象。On Error Resume Next语句一般出现在脚本的开始,其作用是通知VBScript,一旦在运行时出现错误,VBScript将不再显示错误信息,程序也不停止运行而从出错的下一句继续运行,错误的处理由程序完成。当使用这个语句时,程序必须要对可能出现的错误作出相应的处理,否则程序可能还是无法运行。例如:On Error Resume Nextx = 10y = 0z = x / yAlert z如果没有第一句,程序运行时肯定会弹出一个错误信息提示,但现在程序将继续运行,其结果是Alert语句仅弹出一个空白框。实际上尽管错误信息不再提示,但错误类型已经被VBScript所识别,可以从VBScript所提供的名为Err的错误对象中得到错误相关的信息,这就是VBScript错误处理的第二个要素。错误对象Err包括了最后一次发生错误时的相关信息,与一般的对象类似,Err也有不同的属性与方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武汉警官职业学院《日语综合技能实践》2023-2024学年第一学期期末试卷
- 企业法律合规培训
- 2025年冰箱维修服务合同样本
- 2025知识产权合同范本国际智能手机应用许可合同
- 2025国际贸易合同范本的中英文对照
- 2025物业管理服务合同范文
- 2025年度商务咨询合同范本
- 2025年未签订合同的劳动者申请劳动仲裁所需证据有哪些
- 2025合同管理解决方案2
- 山西省运城市盐湖区2024-2025学年高二下学期4月期中调研考试政治试题(含答案)
- 10月自考现代语言学(00830)试题及答案解析与评分标准
- 农村急救体系建设
- 仓库搬运工安全操作培训课程
- 广东省地质灾害危险性评估实施细则(2023年修订版)
- 梯子的安全使用课件
- 《非税收入征收管理》课件
- 老年人的口腔知识讲座
- 西格列汀二甲双胍缓释片-药品解读
- 政府采购工作的不足和整改措施
- Unit1+Art+Ancient+Reading+and+Thinking+Chinese+Art+on+show教学设计 高中英语人教选择性必修第三册
- 自驾车出差油费报销单
评论
0/150
提交评论