百度空间 | 百度首页 
 
查看文章
 
2 Datatype and variables in VBScript
2006年10月18日 星期三 下午 03:37
  • 语句

VBScript的语句可以是一个声明或者一个表达式,或者是注释语句。语句自然结束(换行符),没有特殊的终结符。如果一条语句中包含有单引号('),则该单引号后面的内容被看作是注释。

  • 变量,常量和数据类型

VBScript只支持一种变量数据类型,即Variant。按照变量间的互操作性可进一步分为以下几种子类型:

子类型 描述
Empty 未初始化的 Variant。对于数值变量,值为 0;对于字符串变量,值为零长度字符串 ("")。
Null 不包含任何有效数据的 Variant
Boolean 包含 TrueFalse
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 包含错误号。

VBScript允许通过Class关键字定义用户数据类型。语法是:

Class name
    
statements
End Class
 

如我们可以定义一个CPoint类:

Class CPoint    
     public x   
     public y   
     Sub Dump()   
          MsgBox("x=" & x)   
          MsgBox("y=" & y)   
     End Sub
End Class
 

类似于C++,VBScript中的类也支持构造和析构,这是通过声明

Private Sub Class_Initialize()
    语句
End Sub

Private Sub Class_Terminate()
    >语句
End Sub

来实现的。下面的例子演示了对象创建和析构时的调用。不过,没有办法给这两个方法传入参数,从而限制了这两个方法的应用。默认地,与C++不同,类的方法和成员都是公用的。当然,VBScript并不支持声明与定义分离,这使得类过程定义必须全部写在类声明之中,从而使用类声明很冗长,不方便阅读。
使用 Dim 语句、Public 语句或Private 语句在脚本中显式声明变量。例如:

Dim DegreesFahrenheit          
Dim Top, Bottom, Left, Right      '声明多个变量
Public MyArray(9)                     '声明一个有9个元素的一维数组,且此数组对本应用中所有脚本所有过程可见
Private thisScript
                     '声明一个仅对本脚本可见的变量

前面的例子已经给出了如何声明一个固定元素个数的一维数组。下面是一组声明动态数组和多维数组的例子:

Dim MyArray()
Dim MyTable(5, 10)

这里有几点注意:
1. 默认数组下标从0开始,因些MyTable是一个有6行和11列二维数组。
2. 动态数组在声明前必须分配空间后才能使用,即在使用前,必须使用ReDim 语句确定空间大小。如:
     ReDim MyArray(25)
     ReDim 的调用类似于函数调用,因此这里的25可以用已经确定取值的变量来替换。

使用const来声明一个常量。如:

Const MyString = "这是一个字符串。"
Const MyAge = 49

  • 变量的赋值和初始化

DegreesFahrenheit = 110
MyArray(0) = 0      '对数组元素赋值
MyArray(1) = 1

MyArray(9) = 9

对子类型是对象的变量的赋值必须使用Set语句,除前面在谈论类声明时给出的例子外,这里再给出一个例子:

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")

这样的赋值是错误的:

这样的赋值是错误的:

 

fs = CreateObject("Scripting.FileSystemObject")

这里可以看出,VBSCript尽管是无类型的语言,但数据间的可互操作性决定了变量必然从属于某个子类型,从而变量的赋值,运算和转换也要服从某些规定,否则要么无法通过语法检查,要么更恶劣地,造成逻辑错误。
VBScript不存在C/C++语法意义上的初始化。变量的初始化在第一次赋值时完成,也不存在静态变量。好在我们还有全局(publi)变量来临时代替静态变量的使用。对自定义类型(class),尽管存在Initialize和Terminate事件在分别对象创建和销毁时被调用,由于这两个事件都不接受变量,因而也不存在对类变量真正意义上的初始化。

  • 变量的比较运算和类型运算

对象变量的比较运算在这里需要提及一下。
在语句fs = CreateObject("Scripting.FileSystemObject")中,FilseSystemObject对象有可能创建失败。在C/C++中,这种情况下常常返回null值以示失败。在VBScript中,可以用IsNull(obj)来判断对象obj是否为null值 。永远不要用if obj = NULL或者if obj <> NULL来判断对象obj是否为有效。IsEmpty(var)是一个令人困惑的函数,它用来判断变量var是否仅仅只声明过而未初始化。函数IsObject则可以用来判断某个变量是否属于某个类型。
总之,由于VBScript的无类型性,因而在变量比较和类型运算上比较困难,这也造成程序排错与调试上的困难。下面给出了一些示例:

Dim MyVar, MyCheck
wscript.echo "MyVar is " & MyVar
i = 3 + MyVar
wscript.echo "i = " & i

If IsEmpty(MyVar) Then wscript.echo "MyVar is Empty"

MyVar = Null                  ' 赋为 Null。
If (Not IsEmpty(MyVar)) And IsNull(MyVar) Then wscript.echo "MyVar is not Empty but Null"

MyVar = Empty                 ' 赋为 Empty。
If IsEmpty(MyVar) And (Not IsNull(MyVar))  Then wscript.echo "MyVar is Empty, not Null"

输出结果为:

MyVar is
i = 3
MyVar is Empty
MyVar is not Empty but Null
MyVar is Empty, not Null

鉴于类型是如此重要,我们再看一个函数,VarType()。下面给出了VarType调用可能得到的返回值。

常数 描述
vbEmpty 0 Empty(未初始化)
vbNull 1 Null(无有效数据)
vbInteger 2 整数
vbLong 3 长整数
vbSingle 4 单精度浮点数
vbDouble 5 双精度浮点数
vbCurrency 6 货币
vbDate 7 日期
vbString 8 字符串
vbObject 9 Automation 对象
vbError 10 错误
vbBoolean 11 Boolean
vbVariant 12 Variant(只和变量数组一起使用)
vbDataObject 13 数据访问对象
vbByte 17 字节
vbArray 8192 数组

几个例子:

Dim MyCheck
MyCheck = VarType(300)               ' 返回 2。
MyCheck = VarType(#10/19/62#)    ' 返回 7。
MyCheck = VarType("VBScript")       ' 返回 8。

通过上面的调用可以看出,在VBScript中,数据类型的确是由赋值决定的。因些在变量互操作时,要考虑根据变量的取值来确定其数据类型,进而决定两者是否可以直接参与运算。在后面函数和过程一节中,会有示例进一步演示VarType的用法。


类别:转载教程 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu