一、 VBScript简介
VBScript是Microsoft Visual Basic Scripting Edition的简称,是HTML文件中使用的一种VB脚本语言,它主要运行在Microsoft Internet Explorer中的Web客户机和Microsoft Internet Information Server中的Web服务器上,是VB的一个子集,可以实现部分VB的功能,VBScript的基本语法与Visual Basic(VB)和Visual Basic for Applications(VBA)基本一致,不过它们并不是完全一样的,因为VBScript是特意为在浏览器中进行工作而设计的,它不包括一些在脚本这个范围以外的特性,如文件访问和打印等等。VBScript 是脚本语言,应该算计算机的内置语言,就是可以用脚本语言,不借助系统以外的其他编译工具就能直接控制计算机。而VB(即Visual Basic)就是普通的编程语言,VBScript和Visual Basic是有联系的,他们的语法基本一致,VBScript作为脚本语言,当然就会比Visual Basic简单,从而使HTML语言得到大大的扩展。除了在浏览器里使用VBScript之外,还有一些应用程序也支持VBScript,因此,在Microsoft Windows环境下,VBScript实际是一种比较通用的脚本编程语言。
二、 VBScript 基础
同其他脚本语言一样,在HTML文件中嵌入VBScript的语法是:
<script language= “vbscript”>
<!—
‘这里是程序
-->
</script>
VBScript程序被嵌在<script></script>标签之间,用language属性指定脚本语言是VBScript,代码部分用HTML的注释标签<!—和-->保护起来,是为了防止在某些不支持脚本的浏览器中脚本代码污染HTML文件。虽然<script>…</script>可以出现在HTML文件的<head>…</head>之间或<body>…</body>之间,但为了便于处理,一般把主要的脚本放在<head>…</head>之间,而且把主要工作放在Sub和Function等过程中,供需要时调用。这样做可以有效地提高编程的效率和程序的可读性。
VBScript中程序执行的单位是语句(Statement),一般每个语句由一行代码构成,也可以用“ _”续行,把单个语句拆分成多行,以利于阅读。反之,也可以用“:”号把多个语句放在同一行里。除了语句和空行之外,程序里还可以包含注释,所有注释都以“’”开头,引号后面的部分会被解释器忽略,注释也可以跟在语句后面,但不能出现在续行符后面。
(三)命名规则和数字
VBScript语言中,给变量、函数、过程和常数命名要遵循以下规则:
必须以字母开头;不能包含句点“.”和其他类型声明字符;长度不大于255个字符。控件、窗体、类和模块名不能超过40个字符;不能和已有的关键词同名,如If、Loop、Or和Abs等;VBScript中对名字的大小写是不敏感的,因此对于hello、HELLO解释器都会一视同仁,认为它们完全是同一个名字。
VBScript中使用数字时若没有任何修饰,则一律为十进制数,如20.3999等;此外,也可以使用八进制数,需要用“&O”(其中“O”是单词Octal的首字母O,而不是数字零)做前缀,如&O077、&O143等;还可以使用十六进制数,要用&H做前缀,如&H1CF、&H213等。
VBScript中的数据值只是一种类型———Variant。Variant 是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为 Variant 是 VBScript 中唯一的数据类型,所以它也是 VBScript 中所有函数的返回值的数据类型。
最简单的 Variant 可以包含数字或字符串信息。Variant 用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则 VBScript 会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则 VBScript 将按字符串处理。当然,也可以将数字包含在引号 (" ") 中使其成为字符串。
除简单数字或字符串以外,Variant 可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。当然,从 Boolean 值到浮点数,数值信息是多种多样的。Variant 包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进 Variant 中,而 Variant 也会按照最适用于其包含的数据的方式进行操作。下表13-1显示 Variant 包含的数据子类型。
表13-1 Variant 包含的数据子类型
子类型 |
描述 |
Empty |
未初始化的 Variant。对于数值变量,值为 0;对于字符串变量,值为零长度字符串 ("")。 |
Null |
不包含任何有效数据的 Variant。 |
Boolean |
包含 True 或 False。 |
Byte |
包含 0 到 255 之间的整数。 |
Integer |
包含 -32,768 到 32,767 之间的整数。 |
Currency |
-922,337,203,685,477.5808 到 922,337,203,685,477.5807。 |
Long |
包含 -2,147,483,648 到 2,147,483,647 之间的整数。 |
Single |
包含单精度浮点数,负数范围从 -3.402823E38 到 -1.401298E-45,正数范围从 1.401298E-45 到 3.402823E38。 |
Double |
包含双精度浮点数,负数范围从 -1.79769313486232E308 到 -4.94065645841247E-324,正数范围从 4.94065645841247E-324 到 1.79769313486232E308。 |
Date (Time) |
包含表示日期的数字,日期范围从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日。 |
String |
包含变长字符串,最大长度可为 20 亿个字符。 |
Object |
包含对象。 |
Error |
包含错误号。 |
您可以使用转换函数来转换数据的子类型。另外,可使用 VarType 函数返回数据的 Variant 子类型。
(五)变量
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息。例如,可以创建一个名为 ClickCount 的变量来存储用户单击 Web 页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在 VBScript 中只有一个基本数据类型,即 Variant,因此所有变量的数据类型都是 Variant。
声明变量的一种方式是使用 Dim 语句、Public 语句和 Private 语句在 Script 中显式声明变量。例如:
Dim DegreesFahrenheit
声明多个变量时,使用逗号分隔变量。例如:
Dim Top, Bottom, Left, Right
另一种方式是通过直接在 Script 中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行 Script 时出现意外的结果。因此,最好使用 Option Explicit 语句显式声明所有变量,并将其作为 Script 的第一条语句。
变量命名必须遵循 VBScript 的标准命名规则。变量命名必须遵循:
· 第一个字符必须是字母。
· 不能包含嵌入的句点。
· 长度不能超过 255 个字符。
· 在被声明的作用域内必须唯一。
(六)常量
常量与变量的区别在于常量一旦定义就不能再重新赋值和修改。定义常量的方法是使用Const声明并赋值,例如:
Const string= “hello” ‘定义常量string,值为字符串 “hello”
Const now=#22:02:00# ‘定义常量now,值为时间22点02分00秒
Const pai=3.1415927 ‘定义常量pai,值为浮点数3.141 592 7
VBScript中包含几类基本运算符:算术运算符、比较运算符、逻辑运算符和字符串连接运算符,每一类中包含若干运算符。这些运算符与变量和常量组合起来构成计算的单元————表达式,每个表达式可以包含许多运算符,最终获得一个计算结果。一个表达式的计算顺序是由各个运算符的优先级决定的,优先级越高,则越早执行该步计算。在几大类运算符之间,优先级顺序是:
小括号>算术运算符>字符串连接运算符>比较运算符>逻辑运算符
在任何情况下,首先计算小括号里的表达式,然后按上面的顺序进行计算。各类内部各个运算符之间也区分优先级,如“先乘除后加减”。若是运算符优先级相同,则按从左到右的顺序进行运算。
1.算术运算符
表13-2列出算术运算符并按优先级排列。
表13-2 算术运算符
运算符 |
运算 |
运算符 |
运算 |
^ |
幂 |
\ |
整除 |
- |
负号 |
mod |
求余 |
* |
乘号 |
+ |
加号 |
/ |
除号 |
- |
减号 |
其中乘除号优先级相同,加减号优先级相同。
2.字符串连接运算符
字符串连接运算符包括“+”和“&”。
“+”号只能用在字符串之间,而不能混入其他类型数据;但是用“&”号时如果有其他类型数据,解释器会自动将它们先转换成字符串,所以后者用起来更灵活。
3.比较运算符
表13-3列出比较运算符
表13-3 比较运算符
运算符 |
运算 |
运算符 |
运算 |
= |
等于 |
<= |
小于等于,不大于 |
<> |
不等于 |
>= |
大于等于,不小于 |
< |
小于 |
Is |
引用同一个对象 |
> |
大于 |
4. 逻辑运算符
表13-4为逻辑运算符
表13-4 逻辑运算符
运算符 |
运算 |
运算符 |
运算 |
Not |
非 |
Xor |
异或 |
And |
与 |
Eqv |
等价 |
Or |
或 |
Imp |
蕴含 |
VBScript中的程序流控制语句是指条件执行语句和循环语句。主要包括If…Then…Else语句、Select Case语句、Do…Loop语句、While…Wend语句、For…Next语句、For Each…Next语句等。
1. If…Then…Else语句
有以下几种用法。
(1)
格式:If<条件>Then<语句>
这是最简单的情况,若<条件>的逻辑值为True,则执行<语句>。
(2)
格式:If<条件>Then
<语句块>
End If
若<条件>为True,则执行多个语句构成的<语句块>,最后用关键词End If
结束。
(3)
格式:If<条件>Then
<语句块1>
Else
<语句块2>
End If
若<条件>为True,则执行<语句块1>;否则,执行<语句块2>。
(4)
格式:If<条件1>Then
<语句块1>
Else If<条件2>Then
<语句块2>
…
Else
<语句块n>
End If
多个条件控制:若<条件1>为True,则执行<语句块1>;否则若<条件2>为True,执行<语句块2>;以此类推。
2. Select Case语句
虽然用上面的第4种语句形式可以处理多个条件的情况,但是如果各个条件是判断同一个表达式的值,就显得很烦琐,这时可以用Select Case语句。
Select Case<表达式>
Case<值1>
<语句块1>
Case<值2>
<语句块2>
…
Case Else
<语句块n>
End Select
计算<表达式>,若结果为<值1>则执行<语句块1>,否则若为<值2>则执行<语句块2>,以此类推,若以上值均不对,则执行<语句块n>,最后用End Select语句结束。
3. Do…Loop语句
要循环一段程序,最常用的是Do…Loop语句,有以下几种用法。
(1)
格式:
Do While<条件>
<语句块>
Loop
判断<条件>是否为True,若是True,则执行<语句块>,否则结束循环。遇到Loop时返回到Do语句。
(2)
格式:
Do
<语句块>
Loop While<条件>
与第一种用法类似,但是在判断循环条件之前会执行一次<语句块>。
(3)
格式:
Do Until <条件>
<语句块>
Loop
与第一种用法相反,只在<条件>为False时才执行<语句>。
从上面可以看到要循环执行的语句是放在Do…Loop之间的,循环的条件可以放在前面或后面,区别在于是否先执行一次<语句块>,而且条件判断可以使用While或Until,它们的特点正好相反。在循环执行过程中,如果需要立即跳出循环,可以使用Exit Do语句。
4. While…Wend语句
除了Do…Loop语法之外,还可以用While…Wend实现类似功能,但不够灵活,因而不太常见。
格式:
While <条件>
<语句块>
Wend
5. For…Next语句
For…Next循环是带计算器的循环语句。在For…Next循环中需要设置一个变量作为计算器,循环指定次数。
格式:
For<计算器>=<初始值>To<终止值>Step<步长>
<语句块>
Next
其中,<计算器>是任意一个变量,它在循环开始时被赋值为<初始值>,然后执行循环;遇到Next语句时返回到For语句,将<计算器>加上<步长>后与<终止值>判断,若为False,则进入下一步循环,若为True则结束循环。如果省略了Step<步长>部分,则默认的步长为1。<步长>可以是一个正数,这时的计算器是递增的,与<终止值>比较时使用“<=”操作符;若<步长>是一个负数,则此时的计数器是递减的,与<终止值>比较时使用“>=”操作符。简而言之,无论递增还是递减,一旦计算器达到<终止值>就不再循环下去了。此外,与End Do类似,使用End For语句可以从循环体中跳出循环。
6. For Each…Next语句
格式:
For Each<元素>In<数级/对象集合>
<语句块>
Next<元素>
<元素>是用来枚举的变量,如果省略Next后面的<元素>也是可以的。如果对象集合中有至少一个元素,就会进入循环。任何时候如果需要退出循环,都可以使用Exit For语句。
三、在Internet Explorer中使用VBScript
这是一个简单的客户端验证的样例。HTML 代码的结果是一个文本框和一个按钮。
(一)简单验证:
使用 Visual Basic Scripting,您可以完成通常要在服务器上进行的大量窗体处理工作,也可以完成不能在服务器上进行的工作。
<HTML>
<HEAD><TITLE>简单验证</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Submit_OnClick
Dim TheForm
Set TheForm = Document.ValidForm
If IsNumeric(TheForm.Text1.Value) Then
If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
MsgBox "请输入一个 1 到 10 之间的数字。"
Else
MsgBox "谢谢。"
End If
Else
MsgBox "请输入一个数字。"
End If
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>简单验证</H3><HR>
<FORM NAME="ValidForm">
请输入一个 1 到 10 之间的数字:
<INPUT NAME="Text1" TYPE="TEXT" SIZE="2">
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="提交">
</FORM>
</BODY>
</HTML>
每次引用文本框时都应写出全称,即 Document.ValidForm.Text1。但是,当多次引用窗体控件时,可以按照以下步骤操作:首先声明一个变量,然后使用 Set 语句将窗体 Document.ValidForm 赋给变量 TheForm,这样就能使用 TheForm.Text1 引用文本框。常规的赋值语句(例如 Dim)在这里无效,必须使用 Set 来保持对对象的引用。
(二)验证后将数据传递回服务器:
简单验证样例使用的是普通按钮控件。如果使用 Submit 控件,所有数据都会被立即传送到服务器,示例将不会看到数据来进行检查。避免使用 Submit 控件使您可以检查数据,但不能向服务器提交数据。如果要提交数据则需要再添加一行代码,如下所示:
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Submit_OnClick
Dim TheForm
Set TheForm = Document.ValidForm
If IsNumeric(TheForm.Text1.Value) Then
If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
MsgBox "请输入一个 1 到 10 之间的数字。"
Else
MsgBox "谢谢。"
TheForm.Submit ' 数据输入正确,传递到服务器。
End If
Else
MsgBox "请输入一个数字。"
End If
End Sub
-->
</SCRIPT>
在数据输入正确时,代码调用窗体对象的 Submit 方法,将数据传递到服务器。除非在数据被传递到服务器之前判断其正误,否则服务器将处理数据,而不论其正确与否。