Vbscript初步教程.docx
《Vbscript初步教程.docx》由会员分享,可在线阅读,更多相关《Vbscript初步教程.docx(40页珍藏版)》请在冰豆网上搜索。
Vbscript初步教程
第二章Vbscript初步
本章介绍如何使用VisualBasic的Scripting版本(VBScript),它是ActiveSeverPages的缺省脚本语言。
VBScript通过变量,操作符,循环,分支,函数和子例程,扩展了HTML的功能。
通过在HTML网页中嵌入VBScript脚本语言,可以使静态的HTML网页成为动态网页。
Vbscript介绍
VBScript是MicrosoftVisualBasic的简化版本。
VBScript是一种容易学习和使用的脚本语言。
这意味它比BASIC语言的成熟,易上手又难于使用,因为功能较弱。
编制简单的程序时,脚本语言容易使用。
但简单的句法也使开发大程序变得困难。
VBScript是ActiveSeverPages的缺省语言。
也可以在ASP网页中使用其它脚本语言,如Jscript,Perl等等。
考虑到VBScript适合初学者掌握,我们在本章的ASP例子程序都使用VBScript。
客户端和服务器端编程语言
VBScript既可以作为客户端编程语言,也可以作为服务器端编程语言。
客户端编程语言:
可以由浏览器解释执行的语言。
当编制的脚本(程序)被下载到一个兼容的浏览器中时,浏览器将自动执行该脚本。
客户端编程语言的优点:
●浏览器完成所有的工作,减轻服务器的负担。
●客户端程序运行起来比服务器端程序快得多。
当浏览器的用户执行一个操作时,不必通过网络对其作出响应,客户端程序就可以作出响应。
●脚本代码必须用标记对标记嵌入到HTML页面中。
例
NewDocument
--
dimnum1‘定义变量
IfIsNumeric(num1)Then‘判断是否为数字
Ifnum1<1ornum1>50Then
MsgBox"num1是1到50之外的数字!
"
Else
MsgBox"num1是1到50之间的数字!
"
EndIf
Else
MsgBox"请输入数字!
"
Endif
//-->
客户端脚本部分的注释标记
--和//-->不是必须的,但一般应该加上,因为客户端脚本由浏览器执行,若浏览器不支持该脚本语言,则浏览器将会把代码显示出来(浏览器把脚本代码本身作为HTML页面的内容输出)。
VBScript的客户端脚本,只能在Microsoft的Iexplorer上运行,其他的浏览器大都不支持。
VBScript也可以作为服务器端编程语言。
服务器端编程语言执行站点主机上的所有操作。
服务器端编程语言的优点:
●VBScript脚本在服务器上执行。
不受浏览器的限制,网页通过网络传送给浏览器,Web浏览器收到的只是标准的HTML文件。
●服务器端脚本用分隔符<%和%>包括,或者使用和标记表示脚本在服务器端运行。
我们在以下的讲述中创建的ASP网页,将用VBScript作为服务器端编程语言。
在ActiveSeverPages中使用VBScript
创建可以执行VBScript脚本的网页。
需要把网页文件以后缀名.asp保存。
如果不这样,文件的脚本将不会被服务器解释.
例如:
SimpleVBScript<%FORXX=1TO10%>
WelcometoUESTC!
<%NEXT%>
该脚本将把“WelcometoUESTC!
”显示10次。
字符对<%和%>的使用。
它们指明脚本的开始和结束。
当Web服务器看到这个特殊字符对时,把它们之间的内容作为脚本解释执行。
例如,文本<%FORXX=1TO10%>和文本<%NEXT%>都是VisualBasic脚本的例子。
这两行结合起来构成了一个10次的循环。
变量或函数的输出
符号对<%=变量或函数%>(可以写成Response.Write变量或函数)
例:
ASP网页中变量的输出:
SimpleVBScript<%FORXX=1TO10%>
<%=XX%>:
HelloMagic!
<%NEXT%>
表达式<%=XX%>的作用是显示变量XX的值。
在每个“HelloMagic!
”前面有一个数字,该数字代表变量myvar的值。
例:
用<%=和%>数输出函数值。
如下的ASP网页在网页顶部打印当前日期和时间:
SimpleVBScriptThispagewascreatedon:
<%=Now%>
Haveaniceday!
VBScript函数Now返回当前的系统日期和时间。
当这个文件被Web服务器解释时,Now函数将返回服务器当前时间,并通过<%=Now%>显示出来。
不能把没有返回值的VBScript命令放在符号对<%=和%>之间。
否则,将会产生错误。
<%=FORI=1TO100%>
注意符号对<%和%>与符号对<%=和%>;前者用来指明脚本的开始和结束;另一个用来显示变量和函数的值。
声明变量
变量是计算机内存中已经命名的内存位置,该位置可以存储脚本运行时能更改的信息,在程序中,常用变量来临时存储数据。
在VBScript中,变量命名必须遵循这样的规则:
①变量名必须以字母开头;
②变量名中不能含有句号;
③变量名不能超过255个字符;
④变量名不能和关键字同名;
⑤变量名在被声明的作用域内必须唯一
VBScript变量不区分大小写
变量的声明有两种方式
隐式声明:
在VBScript脚本中,使用变量前不需专门声明。
例如:
SimpleVBScript<%myvar0=”HelloWorld!
”%>
<%=myvar0%>
在该例中,变量myvar0没有经声明而直接被分配了一个值“HelloWorld!
”,并且这个值被输出到浏览器。
这不会产生错误。
虽然隐式声明很方便,但如果敲错了变量的名字,就会导致错误。
如在程序中将myvar0(数字零)为myvaro(英文小写的o),VBScript遇到新的名字,无法确定到底是隐式声明了一个新的变量或是变量的拼写错误。
只好用新名字创建一个新的变量,而这个新声明的变量的值为EMPTY
所以,在编写长而复杂的程序时,最好先声明变量然后再使用,这样的脚本易于调试。
如果敲错了变量的名字,将会产生错误。
显式声明:
下面的例子演示变量必须先声明后使用:
<%OPTIONEXPLICIT%>
SimpleVBScript<%
DIMmyvar0
myvar0=”HelloMagic!
”
%>
<%=myvar0%>
上例中,OPTIONEXPLICIT语句强制所有的变量必须专门声明。
DIM语句声明了变量myvar0。
如果不声明这个变量,将会收到错误信息:
Variableisundefined:
’myvar0’.
用DIM语句可同时声明多个变量,只要把变量名用逗号隔开即可:
DIMx1,x2,x3,x4,xya,bbc
注意:
OPTIONEXPLICIT语句的位置很特殊。
必须把OPTIONEXPLICIT语句作为ASP网页的起始语句之一。
它必须出现在任何HTML标识或其它VBScript命令之前。
否则,该语句将被视为非法语句。
变量子类型
VBScript只有一种数据类型,即Variant类型。
由于Variant类型是VBScript中唯一的数据类型,Variant类型可以在不同场合代表不同类型的数据,Variant是一种特殊的变量类型,它可以代表许多其它类型的变量。
当用DIM语句声明一个变量时,不用为变量定义数据类型。
VBScript中所有变量都是相同的数据类型。
当给一个变量赋值时,variant型变量自动与所赋值的类型保持一致。
参考如下的例子:
<%myvar1=”KeepCatch”%><%=TYPENAME(myvar1)%>
<%myvar2=3%><%=TYPENAME(myvar2)%>
变量myvar1和myvar2被分配了两个不同数据类型的值。
VBScript函数TYPENAME()可以显示该变量代表的实际数据的子类型。
给变量myvar1分配字符串数据“KeepCatch”时,Variant型变量的子类型是string。
给变量myvar2分配整数3时,myvar2的子类型是integer。
变量的数据范围
不同的变量子类型可以代表的数据有不同的范围。
表8.1列出了变量子类型和它们的数据范围的完整信息:
表8.1变量子类型及其数据范围
子类型范围
Byte0到255
BooleanTRUE或FALSE
Integer-32,768到32,767
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.7976931348623eE308
Currency-922,337,203,685,477.5808到922,337,203,685,477.5807
Date1000年1月1日到9999年12月31日
object任何对象的引用
string变长字符串,长度从0个字符到大约20亿个字符
注意string子类型的数据范围非常之大。
可以把整个网页,或者甚至整部小
说保存在一个字符串变量中。
常用的子类型转换函数,见本章的函数部分,可用它们来转换数据的子类型:
空变量和空值变量的讨论
空变量:
声明一个变量后,如果还没有初始化,则该变量的值是EMPTY(为空)。
这个值是自动分配的
当定义了一个变量后,如果尚未给该变量赋值,那么,当该变量参与数值运算时,该变量的值作为0进行运算。
当该变量参与字符串操作时,该变量被作为“”(空字符串)处理。
只要将任何值(0、零长度的字符串、或NULL)赋予变量,变量的EMPTY将会消失。
将变量恢复为空变量,关键字EMPTY赋予变量,如:
myvar=EMPTY
函数ISEMPTY()可以检测一个变量是否为空变量。
如下例所示:
<%
dimmyvar,myvar2
myvar=”HelloMagic!
”
myvar:
<%=ISEMPTY(myvar)%>
myvar2:
<%=ISEMPTY(myvar2)%>
%>
在例中,检测了两个变量myvar和myvar2,看它们是否为空。
因为myvar已经被分配了一个值,当把变量myvar作为函数ISEMPTY()的参数时,该函数返回FALSE。
而myvar2没有分配数据,因此以myvar2为参数时,函数ISEMPTY()返回TRUE。
空变量与被分配了长度为0的字符串或数字0的变量是不同的。
例如,语句myvar=””和myvar=0都该变量myvar分配了一个值。
在这两种情况下,该变量都不是空的。
只有一个从未被赋过值的变量才是空变量。
空值变量:
如果将关键字NULL赋予变量,则变量不包含任何有效的数据,
如果表达式包含NULL,计算结果总是NULL,
将NULL,含NULL的变量,或计算结果为NULL的表达式作为参数传递给大多数函数,将使函数返回的结果为NULL,
测试方法:
使用函数IsNULL()来测试。
空变量与包含空值的变量是不同的。
一个被分配了空值NULL的变量不是空变量,而是有值NULL。
声明常量
VBScript可以声明常量。
常量与变量有相似之处;但是,一旦声明了一个常量,该常量的值将不能被改变。
使用Const语句在VBScript中创建用户自定义常数。
例:
<%
CONSTPi=3.14159
%>
在例中,常量Pi被分配了值3.14159,因为Pi是一个常量,在和后面的脚本中将不能给再给它分配新值,否则将会出现错误提示。
可以一次定义多个常量,将每个常量定义用逗号隔开。
如下:
<%
CONSTPi=3.14159,SITE_NAME=”www.”
%>
最好采用一个命名方案以区分常数和变量。
这样可以避免在运行Script时对常数重新赋值。
例如,可以使用“vb”或“con”作常数名的前缀,或将常数名的所有字母大写。
将常数和变量区分开可以在开发复杂的Script脚本时避免混乱。
创建和修改数组
固定数组
数组是一个可以存储一组值的变量当需要存储一组相关的值时,。
可以创建数组。
例如:
<%
DIMProduct(10)
Product(0)="aspbook"
Product
(1)="cup"
Producr
(2)="videocard"
%>
在这个例子中,DIM语句用来声明一个数组。
与前面讨论的变量不同,数组在使用之前必须声明。
这个DIM语句声明了一个可以存储11个值的数组。
注意:
VBScript中数组的下标从0开始,每个数组的元素个数都比声明语句中的数字多1。
(用刚才讨论的数组Product,可以存储11个值。
如果向该数组中添加超过11个元素,将发生错误。
)
声明一个数组后,数组的每一个元素都可以使用惟一的下标来识别,下标用于指明某个数组元素在数组中的位置,例子中,下标为1的数组元素的值是“cpu"。
如果要输出该元素的值,可以用这样的语句:
<%=Product
(1)%>
上例中数组是一个一维数组,作用与一个列表相似。
当然,也可以创建有多维的数组,。
考虑如下的二维数组:
<%
DIMProduct(10,1)
Product(0,0)="aspbook"
Product(0,1)="databasebook"
Product(1,0)="videocard"
Product(1,1)="cpu"
Product(2,0)="coat"
Product(2,1)="cap"
%>
这个脚本中DIM语句创建了一个二维数组。
这个数组的作用类似于表,第一个下标指定行,第二个下标指定列。
使用数组时,并不只限于使用二维数组。
可以声明最大到60维的数组。
要创建一个多维数组,只要简单地在数组声明语句中增加一个维数即可。
例如:
DIMProduct(10,10,10,10)
这个声明创建了一个四维数组,每一维可以存储11个元素。
这意味着这个数组共可以保存14,641个数值(11*11*11*11=14.641)。
可以看到,随着维数的增加,数组的大小增加得很快。
由于在VBScript中,对每个数组元素都要分配内存空间,因此不要不切实际地声明太大的的数组。
动态数组
前面接触的都是固定大小的数组。
这种数组一旦声明了一个固定大小,那么将不能改变数组中的元素个数。
要改变一个固定数组的大小,你必须删除它再重新创建。
不过VBScript提过了一种动态数组。
<%
DIMProduct()在此没有说明数组的大小
REDIMProduct
(2)
Product(0)="aspbook"
Product
(1)="videocard"
Product
(2)="cpu"
REDIMPRESERVEProduct(3)
Product(3)="databasebook"
%>
在例子,DIM语句把数组Product声明为动态数组。
当声明一个动态数组时,不需要指定数组的维数。
但在第一次给一个动态数组分配数值之前,必须使用REDIM语句指定数组的维数。
数组Product首先被创建为只能有三个元素。
接下来,再次使用REDIM语句,增大了这个数组的大小。
该数组被重定义维数以包含四个元素。
这使你可以把值“CoffeeCup"保存在重定义的数组中。
注意第二个REDIM语句中关键字PRESERVE的使用。
当一个数组被重设维数时,使用关键字PRESERVE能使该数组中的内容保留下来。
如果不使用这个关键字,数组将丢失所有数据,产生一个空的数组。
对于多位数组,可以用REDIM语句增加维数,也可以减少维数。
但是,当你删除某一维或减小某一维的大小时,数据将会丢失。
用关键字PRESERVE,只能修改一个多维数组最后一维的大小。
可以增大最后一维,不丢失数据,或减小最后一维,丢失一部分数据。
当然,如果需要增加或减少多维数组的维数,就不能使用PRESERVE关键字,而且进行该操作时无法保存数组中的数据。
这样可以使用REDIM语句扩展或减缩一个数组任意多次。
数组函数
UBOUND()
使用数组时,函数UBOUND()返回一个数组的大小。
准确地说,返回的是数组的某一维的大小。
这里有这个函数的一些例子:
<%
DIMProduct(10,33)
%>
<%=UBOUND(Product)%>
<%=UBOUND(Product,1)%>
<%=UBOUND(Product,2)%>
第一个UBOUND()函数返回值是10。
在缺省情况下,这个函数返回的是一个函数的第一维的上界。
第二个UBOUND()函数的返回值与第一个相同。
它返回的是数组Product的第一维的上界。
第三个UBOUND()函数的返回值是33。
这是数组Product的第二维的维数。
当一个数组不是自己声明的,但编程时需要确定数组的大小时,函数UBOUND()是非常有用的。
ISARRAY()
操作数组的一个有用的函数是ISARRAY()。
可以用来测试一个变量表达式是否是一个数组。
例:
<%
DIMProduct(10)
DIMsomevar
%>
<%=ISARRAY(Product)%>
<%=ISARRAY(somevar)%>
在这个例子中,第一个ISARRAY()函数返回TRUE,因为Product实际上是一个数组。
第二个ISARRAY()函数返回FALSE,因为变量somevar没有被声明为一个数组。
ERASE
VBScript的ERASE语句,可以用来操作固定大小的数组和动态数组。
对静态数组:
使用ERASE语句,清空数组的数据。
●数组是一个字符串数组,ERASE语句把该数组的所有元素重新初始化为空字符串。
●数组是一个数值数组,ERASE语句可以把该数组的所有元素重新初始化为0。
如下:
<%
DIMProduct
(2)
Product
(1)="Runningshoes"
ERASEProduct
%>
<%=Product
(1)%>
当这个脚本执行时,不会输出任何信息。
ERASE语句清空了数组Product的所有数据。
对动态数组:
对动态数组使用ERASE语句,会删除数组本身。
当删除了一个数组后,内存就被释放。
在重新使用这个数组之前,必须将该数组重新初始化。
如下例所示:
<%
DIMProduct()
REDIMProduct(100)
Product
(1)="shoes"
ERASEProduct
%>
脚本创建了一个Product的动态数组。
该数组的下标值为1的元素被赋值。
然后,用ERASE语句删除了这个数组。
如果在它被删除后试图访问这个数组的任何元素,将会发生错误。
在再次使用这个数组前,必须用REDIM重新声明该数组。
对一个访问率很高的站点来说,内存是非常珍贵的。
因此当一个动态数组不再需要时,最好使用ERASE语句删除它。
如何在VisualBasic脚本中添加注释
在VBScript中,注释符采用西文单引号“′”,即以撇号作为注释的开始;或用REM注释,可以和语句在同一行并写在语句的后面,也可单独占一行。
<%
REMIamaVBScriptcomment.
‘IamalsoaVBScriptcomment.
%>
在例中,REM和单引号都是用来建立注释的。
这两种注释只能用来注释一行。
用REM语句或撇号建立的注释在一行的末尾结束。
你可以把注释与其它VisualBasic语句写在同一行中:
Web服务器解释VBScript脚本时会略过脚本的注释,不会发送给浏览器。
<%
FORi=1TO100‘startofaloop
myvar=myvar+1‘incrementsmyvar
NEXT‘endofaloop
%>
如何将单行语旬分成多行
有时一条语句可能会很长,这给打印和阅读带来不便,此时可用续行符“-”(一个空格紧跟一个下划线)将长语句分成多行。
空格
<%
strTemp="SARS作为一个不为人知的新型传染病种"&_
"今春SARS突然在中国爆发,给中国民众"&_
"带来了巨大灾难,主要在于人们对SARS"&_
"病毒不了解,使人们措手不及。
但是经过"&_
"这场非典战役后,大家对它有了较为全面"&_
"的认识,特别是对它的病状、传播途径和"&_
"治疗有了较全面的掌握,因此,我们相信"&_
"不可能再爆发象今春那样大规模非典疫情
Response.WritestrTemp
%>
VBScript运算符
VBScript有一套完整的运算符,包括算术运算符、比较运算符、连接运算符和逻辑运算符。
当表达式包含多个运算符时,将按预定顺序计算每一部分,这个顺序被称为运算符优先级。
可以使用括号越过这种优先级顺序,强制首先计算表达式的某些部分。
运算时,总是先执行括号中的运算符,然后再执行括号外的运算符。
但是,在括号中仍遵循标准运算符优先级。
当表达式包含多种运算符时,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。
所有比较运算符的优先级相同,即按照从左到右的顺序计算比较运算符。
算术运算符和逻辑运算符等的优先级如下所示:
算术运算符
比较运算符
逻辑运算符
连接运算符
描述
符号
描述
符号
描述
符
号
描述
符
号
求幂
^
等于
=
逻辑非
Not
字符串连接
&
负号
-
不等于
<>
逻辑与
And
字符串连接
+
乘
*
小于
<
逻辑或
Or
除
/
大于