| 下面就VBScript 语言的语法作一简单的介绍。
2.2.1 数据类型
在VBScript中只支持一种数据类型,即Variant。Variant 是一种特殊的数据类型,根据它使用方式的不同,可以代表不同的数据类型,因为
Variant 是 VBScript 中唯一的数据类型,所以它也是 VBScript 中所有函数的返回值的数据类型。
最简单的情况是 Variant 可以包含数字或字符串信息。当Variant 用于数字上下文中时作为数字处理,当用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则
VBScript 会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则 VBScript 将按字符串处理。当然,也可以将数字包含在引号
(" ") 中使其成为字符串。在VBScript识别的过程中,除了数字和字符串之外,还包括了布尔类型、时间类型等,我们将其称为子类型(Subtypes)。在表2-1中,列举了VBScript中数据子类型。
| 表2-1
VBScript中数据子类型 |
子类型 |
描述 |
| 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 |
包含错误号 |
2.2.2 常量
常量是具有一定的名称,用于代替数字或字符串,常量一经声明,其值将不能改变。VBScript还定义了一些内置的常量,可以在脚本中直接使用这些常量。
常量声明使用关键字Const,语法如下:
Const 常量的名称 = 常量的值
例如,如果在脚本中需要使用到π,我们往往会将其定义为一个常量,赋值为3.14,如下所示:
Const PI = 3.14
显然,使用常量会提高脚本的可读性与易维护性。
使用Const语句创建名称具有一定含义的字符串型常量时,通常需要将字符串文字包括在两个引号("")之间。例如:
Const companyname="盛远"
这也是区分字符串型常量和数值型常量最明显的方法。当定义日期时间型常量时,应当将其包含在两个井号(#)之间,例如:
Const ToDate = #6-1-2004#
VBScript还定义了一些内置常量,设计人员可以在程序中定义并直接引用这些常量。VBScript定义的常量例如有颜色常量、比较常量、日期和时间常量、文件输入/输出常量、MsgBox
常量等。
2.2.3 变量
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息。例如,可以创建一个名为
ClickCount 的变量来存储用户单击 Web 页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在
VBScript 中只有一个基本数据类型,即 Variant,因此所有变量的数据类型都是 Variant。
1.声明变量
声明变量的一种方式是使用 Dim 语句、Public语句和 Private语句在 Script 中显式声明变量。例如:
Dim name
声明多个变量时,使用逗号分隔变量。例如:
Dim name, class, age, email
另一种方式是通过直接在 Script 中使用变量名这一简单方式隐式声明变量。但这不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行
Script 时出现意外的结果。因此,最好使用 Option Explicit 语句强制所有变量必须显示声明,并把Option
Explicit 语句作为 Script 的第一条语句。
2.给变量赋值
通过赋值表达式给变量赋值,变量在表达式左边,要赋的值在表达式右边。例如:
B = 200
3.命名规则
在变量命名的过程中,必须遵循以下几条规则:
▲ 变量名称的第一个字符必须是英文字母。
▲ 变量名一般由英文字母、阿拉伯数字和字符“_”构成。
▲ 中间不能有句号。
▲ 不能使用VBScript 的关键字作为变量名。
▲ 变量名称的长度不能超过255个字符。
▲ 变量名在被声明的作用域中必须是唯一的。
4.变量的作用域与存活期
变量的作用域由声明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为过程级变量。如果在过程之外声明变量,则该变量可以被
Script 中所有过程所识别,称为 Script 级变量,具有 Script 级作用域。
变量存在的时间称为存活期。Script 级变量的存活期从被声明的一刻起,直到 Script 运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。
5.标量变量和数组变量
多数情况下,只需为声明的变量赋一个值,只包含一个值的变量被称为标量变量。有时候为了编程的方便,将多个相关值赋给一个变量,因此可以创建包含一系列值的变量,称为数组变量。
数组变量必须先声明再使用。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时,变量名后面带有括号 ( )。下例声明了一个包含
11 个元素的一维数组:
Dim A(10)
在 VBScript 中,数组都是基于 0 的,所以尽管上例括号中的值是10,这个数组实际上包含0到10共 11 个元素。在基于
0 的数组中,数组的元素数目等于括号中显示的数目加 1。这种数组被称为固定大小的数组。
在数组中使用下标为数组的每个元素赋值。例如可以用如下方法给上例中的数值赋值:
A(0) = 256
A(1) = 324
A(2) = 100
. . .
A(10) = 55
数组并不仅限于一维,数组的维数最大可以为 60,尽管实际应用中超过三维就没有什么实际意义。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable
变量是一个有 6 行和 11 列的二维数组:
Dim MyTable(5, 10)
在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。
也可以声明动态数组,即在运行 Script 时大小发生变化的数组。对动态数组的最初声明使用 Dim 语句或 ReDim 语句。但是对于动态数组,括号中不包含任何数字。例如:
Dim MyArray()
ReDim AnotherArray()
要使用动态数组,必须随后使用 ReDim 语句确定维数和每一维的大小。在下例中,ReDim 将动态数组的初始大小设置为 25,而后面的
ReDim 语句将数组的大小调整为30,同时使用 Preserve 关键字在重新调整大小时保留数组的内容。
ReDim MyArray(25)
. . .
ReDim Preserve MyArray(30)
重新调整动态数组大小的次数是没有任何限制的,但是应注意,将数组的大小调小时,将会丢失一些存于数组中的数据。
2.2.4 运算符
VBScript 有一套完整的运算符,包括算术运算符、关系运算符、连接运算符和逻辑运算符:
▲ 算术运算符:用于执行数学计算的运算符。
▲ 比较运算符:用于执行比较操作的运算符。
▲ 连接运算符:用于连接字符串的运算符。
▲ 逻辑运算符:用于执行逻辑操作的运算符
常用的运算符见表2-2。
| 表2-2
常用的运算符 |
算术运算符
|
连接运算符 |
比较运算符 |
逻辑运算符 |
符号 |
描述 |
符号 |
描述 |
符号 |
描述 |
符号 |
描述 |
| ^ |
求幂 |
& |
字符串连接 |
= |
等于 |
Not |
逻辑非 |
| - |
负号 |
|
<> |
不等于 |
And |
逻辑与 |
| * |
乘 |
< |
小于 |
Or |
逻辑或 |
| / |
除 |
> |
大于 |
Xor |
逻辑异或 |
| \ |
整除 |
<= |
小于等于 |
Eqv |
逻辑等价 |
| Mod |
求余 |
>= |
大于等于 |
Imp |
逻辑隐含 |
| + |
加 |
Is |
对象引用比较 |
|
| - |
减 |
|
当表达式包含多种运算符时,存在运算符的优先等级。当表达式里包含几种运算符时,首先执行算术运算符,其次执行连接运算符,然后执行比较运算符,最后执行逻辑运算符。当然,我们也可以通过括号越过优先级顺序,强制首先执行表达式的某些部分。
在同一类运算符中,应按从左到右的顺序进行计算。
字符串连接运算符 (&) 不是算术运算符,但是在优先级顺序中,它排在所有算术运算符之后和所有比较运算符之前。Is 运算符是对象引用比较运算符,它并不比较对象或对象的值,而只是进行检查,判断两个对象引用是否引用同一个对象。
|