VBScript的数据类型

发布时间:2019-10-23编辑:脚本学堂
VBS是一个有着很少数据类型的脚本语言,其并不限制变量为一种单一的数据类型。

VBS不允许你定义一个特定数据类型的变量。实际上,VB 脚本只有一种变量类型,叫作variant,它可以存储任何类型的数据。与其相反,其它程序语言比如 C++是一个对数据类型要求很严格的,因为你必须事先定义变量能存储的数据类型。如果你试图存储任何数据在一个变量上,它将会报错。如果你已经将一个变量赋予特定的数字数据,那么你再将字母变量赋值给它的时候,它将崩溃。

Variants 可以使脚本编写变得简单。你可以在没有定义数据类型的时候宣告并使用。但是如果你不了解数据类型的强制过程,那么variants会导致一系列的问题。

脚本语言所说的脚本无类,其实是针对脚本编写的人员来说的,对于脚本内部来讲,脚本还是要依照数据类型来工作。例如下面这个简单的表达式c= a + b 脚本语言必须给 a,b 都赋 值(有一定数据类型的值),也就是说,它必须建立并确定这两个数值是为 integer 还是 string。当这些值被定下来之后,它才可以执行相关的操作。

脚本的数据类型赋值的初始化过程是一种数据类型强制转换的过程。数据类型的强制过程是基于特定的规则的,大部分的时候,VB 脚本可以很顺利的完成这个任务。

但是,类型转换一样会导致问题的发生,例如下面这个例子:
intFirstNumber = InputBox("Please enter the first number:")
intSecondNumber = InputBox("Please enter the second number:")
intTotal = intFirstNumber + intSecondNumberi
Wscript.Echo intTotal

如果你运行这个脚本,并且先后键入 4,2,那么计算器会回显一个 42 来作为 4+2 的结果,而不是你期待的 6。

这是因为,加法运算对于number和string来说都是合法的。VB 脚本给了 4,2 两个值,但是它不知道数据类型,于是,在没有其它的关于数据类型的相关信息的情况下,VB 脚本就用类型强制的办法将这两个变量转换成了string数据。

与其相反,如果你在下面一小段代码中键入 4,2 它将会返回正确 2,这是因为除法运算只是针对numbers 来作的,所以 VB 就用数据强制正确的将这两个变量转换成了 number 数据。
intFirstNumber = InputBox("Please enter the first number:")
intSecondNumber = InputBox("Please enter the second number:")
intTotal = intFirstNumber / intSecondNumber
Wscript.Echo intTotal

为了避免类似的数据强制的时候发生问题,你需要显式的声明一个变量,这个过程叫做类型初始化。例如如下的 VB 代码用 VB 脚本的 CInt 来在他们想加之前将输入的变量转换为整数型。
intFirstNumber = CInt(InputBox("Please enter the first number:"))
intSecondNumber = CInt(InputBox("Please enter the second number:"))
intTotal = intFirstNumber + intSecondNumber
Wscript.Echo intTotal

此类常见的函数有:Cbool、Cbyte、Ccur、Cdate、CDbl、Cint、CLng、CSng、CStr等。

了解empty和Null之间的不同,对于你脚本的成功与否,起着关键的作用。Empty 变量是一个没有初始化的变量,录入,你用 dim 语句定义一个 curBonus 的变量,这个变量在没有赋给它特定的值的时候,它就是 empty 的。一个 empty 的变量在数据强制的时候,如果是 number 变量就赋值给它 0,如果是 string 的时候,就赋值给它”” (空)。

与其相反,Null 是一个没有合法的赋值的变量。典型的 null 是从数据库操作中产生的。假如你查询一个数据库,想返回一个当前的分红给一个特定的员工,并且将这个值赋给 curBonus,如 果没有分红被分配(赋值),那么变量 curBonus 就是 Null.注意,curBonus 可以是 0,但是你 不能确定它就是 0。你不能假定它的值是 0,因为,有可能的是它实际上有 5000 美元的分红, 但是这个值还没有被输入到数据库中。这就是为什么 VB脚本要将 empty null 这二者加以区别的原因。 二者的区别在数字运算的时候就更加的明显。例如,在下面的脚本片断中,curBonus 被设置成 empty,然后将它加上 curBaseSalary(50000),那么计算的结果是:50000 + 0 = 50000
curBonus = Empty
curBaseSalary = 50000
curTotalCompensation = curBaseSalary + curBonus
Wscript.Echo TotalCompensation

在下面的版本中,继续同样的操作,只是将 curBonus 的值设定成 Null,当你再次运行这个脚本的时候,你会发现你不是得到结果 50000,而是 Null.任何时候,Null 这个变量在参与数字运算的时候,它的结果是 null这是因为你并不知道 NULL 的真正的值,你不能将它的值赋予为 0,因为你不知道它的值是否真 的是 0。因为你不知道它的值,也就不知道它计算的结果,这样结果只能是 null.(你可以这样 认为:null 的含义是:我不知道。)
curBonus = Null
curBaseSalary = 50000
curTotalCompensation = curBaseSalary + curBonus
Wscript.Echo TotalCompensation

Null 值在和数据库和 ADSI 一起工作的时候就会出现错误。幸运的是,你可以使用 IsNull 的办法来确定这个变量是否为 Null.例如,下面的脚本来检察 curBonus 是否为 null,如果值是 null 的话,那么赋值给它为 0。这样可以使他们在计算中生效。当然你也可以选择来回显一个信息框:No bonus information available for this employee."
curBonus = Null
curBaseSalary = 50000
If IsNull(curBonus) Then
CurBonus = 0
End If
curTotalCompensation = curBaseSalary + curBonus
Wscript.Echo curTotalCompensation