2.5  VBScript的表达式与运算符

VBScript中,表达式可以将变量、常数、运算符和关键字结合起来,用于执行运算、处理字符或者测试数据,表达式运算返回的结果可能是数字类型的数据,也可能是字符串类型或者其他类型的数据。其实,我们对于表达式应该是十分熟悉的,例如,1+2就是一个简单的表达式。

在表达式运算的过程中,表达式里操作一个或两个变量、常量或者数据产生运算结果的符号称为运算符,被运算符操作的数据称作操作数,需要注意的是,操作数并不仅仅局限于数字和字符串等类型的数据,它本身也可以是表达式。VBScript支持一套完整的运算符,其中我们会用到算术运算符、关系运算符、逻辑运算符和连接运算符,下面我们就对这些操作符进行简要的介绍。

2.5.1  算术运算

VBScript中,算术运算符用以完成数学运算,一般情况下,算术运算符的语法如下所示:

Result = Exp1 Operator Exp2

其中,Result是表达式运算结果,Operator是算术运算符,Exp1Exp2则是表达式中的操作数。

VBScript中能够使用的算术运算符如表2.2所示,下面我们分别展开介绍:

2.2  VBScript算术运算符

运算符

说明

+

加法运算符,将两个数相加

-

减法运算符,将两个数相减或者对一个数取负

*

乘法运算符,将两个数相乘

/

除法运算符,将两个数相除

\

整除运算符,将两个数进行整除运算

^

幂运算符,将两个数进行幂运算

Mod

模运算符,将两个数整除后进行取模操作

 

2.5.1.1  加法运算符(+)

加法运算符对应着数学运算中的加法运算,例如表达式1+2的运算结果为3

加法操作符还可以对字符串类型的操作数进行运算,然后将两个字符串连接起来作为运算结果。例如,"How are "+"you!"的运算结果为"How are you!"。虽然加法运算符完全可以进行字符串连接,不过,我们并不建议这样使用,因为容易引起混淆,在字符串连接的时候,我们建议采用字符串连接的符号——&

在加法运算的过程中,如果两个操作数都是数字类型,那么将进行加法操作:3+4的结果是7;如果两个操作数都是字符串类型,那么将进行字符串连接操作:“3”+“4”的结果是“34”;如果一个操作数是数字,另外一个操作数是字符串,那么会将字符串转化为数字之后进行加法操作:3+“4”的结果是7

2.5.1.2  减法运算符(-)

减法运算符对应着数学运算中的减法运算,例如表达式2-1的运算结果为1

同时,减法运算符还是一个取负运算符,当它作为取负运算符的时候,它只有一个操作数,取负运算符的功能是返回操作数的相反数。例如如果变量i的值为2,那么-i这个表达式的值为-2

2.5.1.3  乘法运算符(*)

乘法运算符对应着数学运算中的乘法运算,例如表达式2*3的运算结果为6

2.5.1.4  除法运算符(/)

除法运算符对应着数学运算中的除法运算,但VBScript中的除法运算有些特别,在VBScript中,除法运算后的结果是一个浮点数,而不象C语言或者Java语言那样在整数进行除法运算时将运算结果强行转化整数,在VBScript中,1/2=0.5,而在C语言中,1/2=0

2.5.1.5  整除运算符(\)

整除运算符对应着数学运算中的整除运算,将两个操作数相除后返回结果的整数部分,例如表达式5\2的运算结果为2。不过在VBScript中,整除运算符并不局限于整数,如果操作数是浮点数,VBScript会先将其四舍五入转化为整数之后,然后再进行整除运算。例如5.4\1.5=2,而5.5\1.5=3

2.5.1.6  幂运算符(^)

幂运算符对应着数学运算中的幂运算,可以用于计算第一个操作数的指数次方,例如,表达式3^2的运算结果为9。在幂运算中,指数还可以是小数,例如,3^0.5= 1.73205080756888,不过必须在第一个操作数为非负数字的时候,指数才能够是小数,因为在VBScript的运算中,并不支持复数运算。例如,如果表达式是(-3)^0.5,那么将会出现错误。

2.5.1.7  模运算符(Mod)

模运算符对应着数学运算中的取模运算,将两个操作数进行整除操作之后返回其余数,例如,表达式5 Mod 2的运算结果为1。和整除运算符一样的是,进行取模运算的时候,VBScript也会先将两个操作数四舍五入之后,然后再取模。例如,5.4 Mod 1.5=1,而5.5 Mod 1.5=0

模运算符主要用于判断一个数字是否能被另外一个数字整除,例如,如果我们希望知道某个年份是否是闰年,我们可以采用如下判断方法:如果这个年份能够被4整除,并且不能被100整除,那么,这个年份是闰年,另外,如果这个年份能够被400整除,那么这个年份也是闰年。假设年份变量的名称为theYear,那么判断是否为闰年的表达式如下所示:

((theYear Mod 4 = 0) And (theYear Mod 100 <> 0)) Or (theYear Mod 400 = 0)

其中And代表的是逻辑运算中的与运算,Or代表的是逻辑运算中的或运算,关于逻辑运算,我们会在以后部分中进行介绍。

2.5.2  关系运算符

关系运算符将两个操作数进行比较,判断其关系,然后返回一个逻辑值,表明这个比较操作的结果是真还是假。其语法形式如下所示:

Result = Exp1 Operator Exp2

其中Result是表达式的判断结果,结果可能是TrueFalse或者NullOperator是关系运算符,Exp1Exp2则是表达式中的操作数。在使用的时候,我们会发现,如果判断结果为True,那么返回的是-1,如果判断结果为False,那么返回的是0,如果判断结果为Null,那么什么也不返回。

VBScript支持的关系运算符如表2.3所示:

2.3  VBScript关系运算符

运算符

说明

=

等于关系,判断两个操作数是否相等

<>

不等于关系,判断两个操作数是否不相等

>

大于关系,判断前一个操作数是否大于后一个操作数

<

小于关系,判断前一个操作数是否小于后一个操作数

>=

大于等于关系,判断前一个操作数是否大于等于后一个操作数

<=

小于等于关系,判断前一个操作数是否小于等于后一个操作数

IS

对象关系,用来比较对象类型

 

注意:如果关系运算中的任何一个操作数为Null,那么表达式返回的结果既不为True,也不为False,而是Null

在关系运算中,如果两个操作数都是数值,那么将进行数值比较。如果两个操作数都是字符串,那么将进行字符串比较。如果一个操作数是数值,另外一个操作数是字符串,VBScript则假定任何数值都比字符串要小。

2.5.2.1  等于关系(=)

等于关系比较两个操作数是否相等,如果两个操作数相等,返回True,否则返回False。例如,3=3.0的返回结果为True3=4的返回结果为False

2.5.2.2  不等于关系(<>)

不等于关系比较两个操作数是否不相等,如果两个操作数不等,返回True,否则返回False。如果操作数相同,等于关系和不等于关系判断的结果完全相反。例如,3<>3.0的返回结果为False3<>4的返回结果为True

2.5.2.3  大于关系(>)

如果左操作数大于右操作数,返回True,否则返回False。例如,3>2的返回结果为True,而3>3的返回结果为False

2.5.2.4  小于关系(<)

如果左操作数小于右操作数,返回True,否则返回False。例如,3<4的返回结果为True3<3的返回结果为False

2.5.2.5  大于等于关系(>=)

如果左操作数大于等于右操作数,返回True,否则返回False。在两个操作数完全相同的情况下,大于等于关系和小于关系的返回结果完全相反。例如,3>=4的返回结果为False3>=3的返回结果为True

2.5.2.6  小于等于关系(<=)

如果左操作数小于等于右操作数,返回True,否则返回False。在两个操作数完全相同的情况下,小于等于关系和大于关系的返回结果完全相反。例如,3<=2的返回结果为False3<=3的返回结果为True

2.5.2.7  对象关系(IS)

对象关系用于比较两个变量引用的对象,如果两个对象引用同一个变量,那么返回True,否则返回False。对象关系只能比较对象类型,而不能比较其他类型。例如,请看下面的语句:

Set ObjA = ObjB

在这个语句中,执行的结果是使得ObjA引用ObjB所引用的同一个对象,在这种情况下,ObjA IS ObjB的返回结果为True

2.5.2.8  字符串类型的比较

在关系运算中,如果两个操作数都是字符串,那么将进行字符串类型的比较。在比较字符串的过程中,VBScript把字符串中的每个字母转换成相应的ASCII码值,然后从第一个字符开始比较两个字符串中相应的字符,比较它们的ASCII码值。例如, “hello”=“Hello”的返回结果为False,因为左操作数的第一个字符为h,右操作数的第一个字符为HhASCII码值为104HASCII码值为72,从第一个字符开始就不相等了,所以表达式的值为False

如果有两个表达式:“hello”>“Hello”“hello”>=“Hello”,返回结果都为True,因为左操作数第一个字符的ASCII码值为104,而右操作数的第一个字符的ASCII码值为72104>72(当然同样104>=72),所以两个表达式的值都为True

而如果表达式为“came”>=“come”,首先,比较两个操作数的第一个字符,都是c,这样,不能直接判定两个操作数的大小,然后再比较两个操作数的第二个字符,左操作数为a,右操作数为oaASCII码值为97oASCII码值为111,当然97<111,所以对于这个表达式来说,它的返回结果为False

字符串类型的比较情况下,我们用得最多的是判断某个字符串类型的变量是否为空串,假设我们判断变量的名称为theString,那么对于theString=“”这个表达式来说,如果theString为空串,则表达式为True,否则为False

2.5.3  逻辑运算符

逻辑运算符可以把布尔类型的表达式组合起来,完成逻辑运算操作,然后返回其结果——真或假,这样就可以完成比较复杂的逻辑判断工作,一般情况下,逻辑运算符的语法如下所示:

Result = Exp1 Operator Exp2

其中,Result是表达式运算结果,Operator是逻辑运算符,Exp1Exp2则是表达式中的操作数。而对于逻辑运算符中的非运算符(Not),则只有一个操作数。

VBScript中,逻辑运算符十分丰富,如表2.4所示:

2.4  VBScript逻辑运算符

运算符

说明

And

与运算符,执行逻辑与运算

Or

或运算符,执行逻辑或运算

Not

非运算符,执行逻辑非运算

Xor

异或运算符,执行逻辑异或运算

Eqv

等价运算符,执行逻辑等价运算

Imp

蕴涵运算符,执行逻辑蕴涵运算

 


第一章第二章第三章第四章第五章