VBScript语言编程参考.docx
《VBScript语言编程参考.docx》由会员分享,可在线阅读,更多相关《VBScript语言编程参考.docx(33页珍藏版)》请在冰豆网上搜索。
VBScript语言编程参考
单元七初识VBScript
[学习目标]VBScript基础知识;在HTML中嵌入脚本代码;VBScript的常量、变量与数组;标准函数的使用;在VBScript中实现输入与输出。
利用HTML编写的网页基本上属于单向的信息传送,即用户只能浏览网页的内容(由发布者设置),而不能与网页交互。
那么能否让网页与用户进行交互,能否在网页上显示动态的内容(如当前的时间、操作的提示等)?
显然用HTML是无法实现的,但利用脚本程序却可以方便地实现这些功能。
7.1VBScript入门
[案例说明]欢迎光临网页
图7-1“欢迎光临”网页
网页看起来很简单,首先出现一个“欢迎光临”的消息框,用户单击确定按钮后,出现正式网页(图7-1)。
[代码分析]
代码如VBS07_01.htm所示,请注意与以前学过的一般的HTML代码的不同。
黑体部分即为VBScript脚本程序代码,这段代码非常简单,只是在屏幕上显示一个消息框,这里使用了MsgBox函数。
将VBScript代码放置在“
--!
-->”之间以使当浏览器不支持脚本程序时忽略该段代码,不会将其显示在网页上,以提高HTML文件的适应性。
考虑到目前一般的机器上都支持VBScript脚本语言,在教材的其他案例中将省略该注释,但读者在真正开发网页时还应该使用这种方法。
在使用脚本程序时,首先必须使用标记,告知HTML解释器在标记对间是脚本语言代码。
[相关知识]
嵌入在HTML代码中用以完成某些特定功能的小程序段,这个小程序段不是使用HTML代码,而是使用了VB或Java语言的语法;其执行也不像VB或Java语言那样是编译执行,而是逐行解释执行。
常见的脚本语言有VBScript与JavaScript两种,在网页中可以同时使用这两种脚本语言,只要在开始使用前声明语言的类型即可。
VBScript(VisualBasicScriptingEdition)是程序开发语言VB(VisualBasic)家族的成员之一,它简单易学,符合网页设计的特点。
VBScript包括浏览器中的Web客户机Script和Web服务器中的Script。
理论上脚本语言代码可以放置在HTML页面的任何位置,但一方面为了保证代码的可读性;另一方面也是为了保证脚本代码在页面正常显示之前下载并解释完毕,一般将脚本语言代码集中放置在HEAD标记内。
当然如果脚本代码只是被用作处理某些表单元素或控件,则必须将其放置与该元素相联系的HTML代码中。
VBS07_02.htm是三种典型的嵌入位置。
[知识扩展]
脚本语言的执行:
当浏览器解释含有脚本语言代码的HTML页面时,若遇到。
该标签有很多属性供人们在调用脚本时使用。
常用属性的含义如下:
language:
设置或获取当前脚本编写所使用的语言,以便浏览器调用相应的引擎来编译执行。
合法的可以是“VBScript”、“JavaScript”、“Jscript”、“XML”等。
当该项缺省时,系统会选择一种脚本语言来解释,通常会选择“Jscript”。
type:
该属性与language属性类似,它表示的是关联的脚本引擎的MIME类型,可以是以下形式:
值含义
text/Jscript:
Microsoft®JScript®引擎
text/javascript:
Jscript引擎
text/vbs:
VBScript引擎
text/vbscript:
VBScript(与text/vbs相同)引擎
text/xml:
XML引擎
例如:
与是相同的,一般情况下这两个属性不要同时使用。
for:
设置绑定到事件脚本的对象名称,指明该脚本是为哪一个对象而调用。
由于对象要自动调用脚本需要通过事件,因此,一般使用for属性后都要使用event属性(事件)来说明与哪一个事件绑定。
例如:
alertDocument.myForm.myText.Value
这种脚本由于只为一个对象的一个事件服务,因此并不需要过程定义或函数定义。
表示定义了一个名为“myButton”的按钮,然后为该按钮的“onClick”事件编写一个脚本。
7.2在VBScript中使用数据
7.2.1在VBScript中使用常量
[案例说明]VBScript中的常量
图7-2的实例所显示的信息框中,提示信息占了两行;而在图7-3的实例中计算了一个指定半径圆的面积。
两个实例简要说明了在VBScript中如何使用常量数据。
图7-2使用系统常量图7-3使用自定义常量
[代码分析]
代码VBS07_03.htm中,仍然使用了MsgBox函数来输出信息。
但在第一个输出函数中使用了“vbCrLf”系统常量;而在第二个输出函数前先预先定义了一个常量Pi,然后利用MsgBox函数的计算功能来计算一个指定半径圆的面积并输出。
内置常量vbCrLf亦可用chr(13)+chr(10)来表示,chr(13)代表回车,chr(10)代表换行。
第一个实例使用了VBScript中的内置常量vbCrLf,该常量表示回车换行,其后的内容将在下一行显示。
第二个实例使用Const定义了一个常量Pi使其等于数学中的π,在输出函数中将该常量代入到圆面积计算公式中计算。
[相关知识]
常量是具有一定含义的名称,用于代替数字或字符串,其值从不改变。
在VBScript中使用常量的目的是一方面是使常量有一个含义明显的名称,另一方面当一个常数被多次使用而需要修改时,使用常量可以大大提高代码的编写效率。
VBScript有两种类型的常量:
一种是预先定义好了的内置常量如vbCrLf、Empty、Null、True……,这一类常量不用声明即可直接使用;另一种是需要定义的常量,即用户自己定义的常量。
VBScript中的内置常量有许多,包括颜色、关系比较、日期时间、数据格式、信息框、字符串等。
如黄色的颜色数在VBScript中应表示为&hFFFF,但这个数不好记忆,可使用内置常量vbYellow来代替它。
用户自定义常量是用户根据脚本的需要自己定义说明的常量,常量的定义可以使用Const语句。
例如:
ConstMYSTRING="这是一个字符串。
"
ConstMYAGE=49
请注意字符串文字包含在两个引号("")之间。
这是区分字符串型常数和数值型常数的最明显的方法。
而日期文字和时间文字包含在两个井号(#)之间。
例如:
ConstCUTOFFDATE=#6-1-97#
最好采用一个命名方案以区分常数和变量。
这样可以避免在运行Script时对常数重新赋值。
例如,可以使用“vb”或“con”作常数名的前缀,或将常数名的所有字母大写。
将常数和变量区分开可以在开发复杂的Script时避免混乱。
本教材中所有的常量将全部大写。
与其它语言类似,在使用Const语句定义常量时有如下限制:
1、不能将变量送到常量中
2、也不能将一个表达式的值送到常量中
3、更不能将函数的返回值送到常量中
如下列定义都是非法的:
ConstNUMCON=Var1
ConstSTR_LEN=Len(Str1)
ConstADD_CON=4+1
7.2.2在VBScript中使用变量
[案例说明]VBScript中的变量
图7-4中显示的姓名“张三丰”与直接在HTML中显示有所不同,它是通过变量来显示的。
[代码分析]
在VBS07_04.htm代码中通过“dimName”说明语句定义了一个名为Name的变量,并为Name赋于值“张三丰”,然后通过documents对象的write方法将Name的值输出到浏览器中。
document对象是IE浏览器对象模型中的一个成员对象,它代表了显示在窗口或框架中的文档。
作为对象它有许多属性与方法,write即为其最主要的方法之一。
write方法是将指定的文本内容添加到网页上,其语法为:
Document.writesText
sText为需要显示的文本内容,它可以任意合法的表达式。
有关IE浏览器对象模型及其属性、事件方法详见单元十。
[相关知识]
设想一个小游戏:
准备一个小纸盒与一些小纸片,在纸片上写上不同内容如数值300、字符串“China”或“中国”、日期#2005-06-30#等。
假设纸盒中只能容纳一张纸片,为纸盒命名为Box:
将300的纸片放入纸盒,则Box的内容即为300;将300的纸片取出,再将“China”的纸片放入,则Box的内容为“China”;如此等等。
显然Box的内容是随着放入的内容不同而变化的,因此我们将Box称为变量。
如果我们将纸盒想象成为内存中的某一个存储单元,纸盒名称Box即为该存储单元的名称,纸盒Box中的内容也就是存储单元中的内容。
所以,变量就是内存中某存储单元的标识,每个变量必须有一个名字,称为变量名。
变量的命名必须遵守一定的规则,这些规则既适用于变量的命名也适用于VBScript中其他标识符的命名(如函数、过程、类、常量等)
●变量名最长不能超过255个字符,一般情况下不要超过20个字符。
变量名最好具有与其存放内容相适应的意义。
●变量名必须以字母开头,可由字母、数字与下划线组成。
如2myvar是非法的,而Myvar2是合法的。
当一个变量名由多个单词构成时,在单词间加上下划线可以提高其可读性。
如Student_name。
●变量命名时不能与VBScript的保留字相同,包括语句名如If、内置常量名、标准函数名等等。
●在变量的作用范围内,其名称必须是惟一的。
有关变量的作用范围将在单元九中讨论,现在只要记住在同一个过程中的变量不能同名即可。
从上面的游戏可以看出,纸盒内可以存放不同类型的数据:
300是数值、“China”是字符串而#2005-06-30#又是日期。
不同类型的数据可以进行不同的操作。
事实上,与其它语言不同:
VBScript的数据类型只有一种即:
Variant。
Variant是一种特殊的数据类型(也称为变体型),它可以接受存储任何类型的数据,在大多数情况下,它能根据所存储的数据及上下文情况自动进行合适的内部转换,以适应不同的操作。
所以作为初学者可以不必关心变量存放了什么类型的数据。
一般来说Variant可以接受逻辑型、字节型、整型、长整型、单精度型、双精度型、日期时间型、货币型、字符串型、对象型、Empty、Null等各种不同类型的数据。
VBScript中的变量在使用前一般需要先声明。
声明变量的一种方式是使用Dim语句、Public语句和Private语句在脚本中显式声明变量。
例如:
DimName
声明多个变量时,使用逗号分隔变量。
例如:
DimTop,Bottom,Left,Right
在VBScript中也可以不声明直接使用变量,这一简单方式称为隐式声明。
但这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。
因此,最好使用OptionExplicit语句要求显式声明所有变量,并将其作为脚本的第一条语句。
本教材为了简捷没有使用该语句。
变量声明后即可将数据存放到变量中,也即要进行变量的赋值。
对变量进行赋值是通过赋值语句进行了。
其格式为:
变量名=表达式
将表达式的值送到变量名中,特别注意的是这里的“=”并非是等于号,而是赋值号,因此赋值号两边是不能交换的。
例如:
Name="张三丰"
Top=300
Left=Top+10
VBScript中可以针对各种类型的数据进行运算,其运算符包括算术运算符、比较运算符、连接运算符与逻辑运算符。
当在一个表达式中出现多种不同的运算符时将按预定顺序计算每一部分,这个顺序被称为运算符优先级。
可以使用括号越过这种优先级顺序,强制首先计算表达式的某些部分。
运算时,总是先执行括号中的运算符,然后再执行括号外的运算符。
但是,在括号中仍遵循标准运算符优先级。
当表达式包含多种运算符时,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。
所有比较运算符的优先级相同,即按照从左到右的顺序计算比较运算符。
算术运算符和逻辑运算符的优先级如表7-1所示。
当乘号与除号同时出现在一个表达式中时,按从左到右的顺序计算乘、除运算符。
同样当加与减同时出现在一个表达式中时,按从左到右的顺序计算加、减运算符。
尽管VBScript具有自动识别数据类型的功能,但原则上在运算符两边出现的数据其类型应该相同,否则VBScript会根据一般情况及运算方式对数据先进行转换后进行运算。
例如:
dimvar1,var2
var1=1
var2="2"
msgboxvar1&var2'显示“12”
msgboxvar1+var2'显示3
字符串连接(&)运算符不是算术运算符,但是在优先级顺序中,它排在所有算术运算符之后和所有比较运算符之前。
Is运算符是对象引用比较运算符。
它并不比较对象或对象的值,而只是进行检查,判断两个对象引用是否引用同一个对象。
表7-1VBScript中的运算符及优先级
算术运算符
比较运算符
逻辑运算符
描述
符号
描述
符号
描述
符号
求幂
^
等于
=
逻辑非
Not
负号
-
不等于
<>
逻辑与
And
乘
*
小于
<
逻辑或
Or
除
/
大于
>
逻辑异或
Xor
整除
\
小于等于
<=
逻辑等价
Eqv
求余
Mod
大于等于
>=
逻辑隐含
Imp
加
+
对象引用比较
Is
减
-
字符串连接
&
VBS07_05.htm说明了Variant数据类型及其运算。
关于比较运算:
比较运算在脚本程序控制中经常作为程序流程控制的条件,在进行比较运算时要注意以下问题:
(1)参与比较的必须是同一类型的数据,即字符与字符比较、数值与数值比较等等。
(2)比较的结果是逻辑值(布尔值),成立为True,不成立为False
(3)比较的准则:
●数值之间按大小
●字符按其ASCII码值
●汉字按其标准码值
●日期按先后:
日期早的小于日期晚的
关于逻辑运算:
逻辑运算通常是对多个比较运算进行结合,在程序控制中常用来构成复杂的判断条件,常用的逻辑运算有Not、And、Or,三者的运算规则如表7-2所示:
表7-2逻辑运算
布尔量A
布尔量B
AAndB
AOrB
NOTA
备注
False
False
False
False
True
False
True
False
True
True
True
False
False
True
False
True
True
True
True
False
7.3在VBScript中使用数组
[案例说明]VBScript中的数组
在7.2节中所介绍的变量只能处理一个数据,如果要处理一批数据就必须使用数组。
图7-5即是通过一个数组来显示一批人物的姓名,代码如VBS07_06.htm所示。
[代码分析]
脚本中首先通过Dim语句说明了一个数组变量famname(5),然后再使用赋值语句为数组中的每一个元素赋值。
为了将这些元素的值输出,代码中使用了循环的语句结构,每次输出一个人物姓名。
有关循环结构的使用可参见单元八中相关的内容,在此只要理解循环体内的document.write(famname(i)&"
")语句连接执行了6次即可。
[相关知识]
还记得在学习变量中所做过的游戏吗?
现在将这个游戏扩展一下,准备7个相同的纸盒,其名称均叫“Box”,为了区别这7个纸盒,给每个纸盒一个编号0、1……6,这样第一个纸盒即为Box(0),第二个纸盒是Box
(1),依次类推,第七个纸盒为Box(6)。
显然五个纸盒中均可以放入不同内容的纸片,例如将内容为100的纸片放入第2个纸盒,则Box
(1)的值就是100;将内容为“China”的纸片放入第五个纸盒,则Box(4)的值即为“China”……因此,我们称纸盒Box为数组变量。
数组变量是指可含有一系列多个值的变量,与此对应的只能含有一个值的变量称为标量变量。
数组的构成如图7-6所示。
图7-6数组变量构成
每个数组都有一个数组名(命名规则与变量相同),数组必须先声明才能使用,例如:
DimBox(7)
声明了一个名为Box的一维数组,共有7个元素,下标为0~6。
数组并不仅限是一维的,在VBScript中也可以使用多维数组,最多可达60维。
但在实际操作中使用较多的也只是一维或二维数组。
例如:
DimBox_D(4,7)
声明了一个Box_D的二维数组,其元素个数为4×7=28.如图7-7所示。
数组一经声明即可使用。
数组的使用与一般变量的使用是类似的,也可以对数组元素赋值,也可以引用数组元素。
要注意的是无论是赋值还是引用都要通过下标指明是那个数组元素。
图7-7二维数组
如famname
(2)="黄蓉"即是将字符串赋给数组famname的第3个元素。
引用数组元素与引用一般的变量是相似的,如:
NameTxt=famname
(2)就是将第3个元素的值送到NameTxt变量中。
VBS07_07.htm演示了数组的赋值与引用。
该程序的功能是查询指定下标的数组元素的值。
说明iArray(5)后,逐个对数组元素赋整数值,通过InputBox函数输入要查询的下标值;使用一个判断结构判断输入的合法性:
如输入的是数字则输出相应的数组元素值,否则提示
在上例中,如果输入了一个比0小或比5大的数字,会发生什么?
会出现一个“下标越界”的提示信息。
如何避免?
为“非法输入”。
[知识扩展]固定数组与动态数组
前面所介绍的数组在定义时必须知道其元素个数,这种数组称为固定数组。
固定数组在使用过程中的元素个数是固定的,不能改变。
但在实际使用中往往一开始并不能知道一个数组所包含的元素个数(如要统计一个班级男女生的人数),这时固定数组就显得力不从心了。
VBScript也支持动态数组的使用。
动态数组允许你根据需要随时扩充数组的大小,动态数组的定义与固定数组也不一样,定义时并不需要指明数组所包含的元素个数。
例如:
DimiArray()'定义一个动态数组iArray,元素个数未知
在需要改变这个数组时,可以根据需要使用ReDim语句对数组进行重新定义。
ReDimiArray(5)'将数组改变为具有5个元数的数组
ReDim命令可以多次使用,但一般情况下对数组重新定义后,原数组中的内容会丢失,为了防止这种情况的发生,可以使用Preserve关键字:
为节省篇幅,从本实例起,除非特别需要,否则只列出VBScript的相关代码,读者只要将代码嵌入到相关的HTML代码中即可运行。
ReDimPreserveiArray(n)'将数组改变为n个元素,同时保留原有的内容
实例VBS07_08.htm显示了动态数组的使用。
7.4VBScript函数
[案例说明]VBScript中的函数
我们浏览网站时,经常需要输入用户名与密码,在输入正确的用户名与密码后,网页上会出现欢迎光临、当前日期与时间等信息。
图7-8显示的正是这样的信息。
[代码分析]
VBS07_09.htm代码中首先使用InputBox函数要求用户输入用户名(在以后可以将些输入放在文本框中),并将用户的输入存放到变量Nanme中,然后直接使用Document对象的Write方法输出欢迎信息。
在欢迎信息中,使用了两个函数,一个是Date(),用于返回当前的日期,另一个是Time()函数,用于返回当前时间
[相关知识]
函数是完成某些特定计算或特定功能的代码段。
与普通数字中的函数相似,函数也具有函数名;有自变量(参数);有返回值。
当给定所需要的参数后,函数总有特定的返回值。
函数与变量或常量一样是构成运算表达式的主要成份。
在VBScript中有两大类函数:
一是内置的标准函数,这一类函数可以直接调用;二是用户自定义函数,它首先需要进行函数的定义,然后才能调用。
有关用户自定义函数请参见下一单元的介绍,本单元主要介绍内置标准函数。
VBScript的标准函数与VB所提供的标准函数相同,主要类型如表7-3所示。
表7-3VBScript标准函数分类表
类别
主要功能
典型函数
字符串处理
对字符串进行处理,如去空格、取子串、取长度等。
ASC()、InStr()、Len()、Mid()、Ltrim()/Rtrim()、Left()/Right()…
数学函数
对指定参数进行数学运算,如求平方根、绝对值、随机数等
Sqr()、Abs()、Rnd()、Exp()、Sgn()、Log()……
日期函数
返回系统日期、时间等参数,对日期数据进行相关运算
Date()、Day()、Year()、Now()、DateSerial()、TimeSerial()……
输入与输出函数
用于用户输入相关信息或显示信息
InputBox()、MsgBox()
转换函数
将一种类型的数据转换为另外一种类型
Cbool()、Cdate()、Chr()、Cint()、Cstr()、Val()……
类型判断函数
判断参数所属的数据类型
IsArray()、IsDate()、IsEmpty()、IsNull()、IsNumeric()……
VBScript有近100种功能各异的函数,为脚本编写提供了极大的方便。
函数的一般格式为:
函数名([参数1,参数2,……参数n])
函数名为系统指定的字符串,一般是与功能相关的英文单词或组合如:
ASC—返回指定字符的ASCII码值、InStr—查找指定字符串在另一字符串中的位置。
与数学函数一样,大多数VBScript函数都需要参数,而且参数的个数也不尽相同。
在给定参数时要注意:
(1)需要几个参数,每个参数的含义,有些参数是可以省略的,但省略后的缺省值必须清楚。
(2)参数的数据类型
(3)不同数据类型数据的格式:
字符型数据要加引号、日期型数据要加#号等等。
每一种函数都有相应的返回值,它与函数功能及所给定的参数相关。
所有的函数只能出现在表达式中,不能将函数作为命令来使用。
有关VBScript各种函数的