第4章VBScript脚本语言基础
本章内容:
□VBScript简介
□常量、变量、表达式、函数
□顺序结构、选择结构、循环结构
□VBScript过程
HTML是一种静态的语言。严格的说,它只是由一对对告诉浏览器如何显示内容的标记的集合。为了让网页具有动态的效果,就需要脚本(Script)语言来组织。就像有了演员还要有剧本才能拍戏一样。Web编程中常用的脚本有JavaScript、VBScript等,JavaScript常用于浏览器端,VBScript多用于服务器端。
本章主要介绍VBScript的基本语法及其简单应用。
4.1 VBScript的概念
Microsoft Visual Basic Scripting Edition 是程序开发语言Visual Basic 家族的最新成员,它是Visual Basic 的一个子集,编程方法和Visual Basic 基本相同,它将灵活的脚本应用于更广泛的领域,包括Microsoft Internet Explorer 中的 Web 客户机脚本和Microsoft Internet Information Service 中的Web 服务器脚本。服务器端脚本后面作重点介绍,本章介绍VBScript在浏览器端的编程。
浏览器端编程的目的是在客户端让浏览器完成必要的工作。当浏览器的用户执行一个操作时,不必通过网络对其做出响应,客户端程序自己就可以做出处理。这样既可以减轻服务器的负担,又减少了网上数据的传输量,而且客户端程序运行起来也比服务器端程序快。
浏览器端编程时脚本语言代码必须包括在标记之内,整个脚本代码块嵌入HTML代码之中,具体嵌入位置可以在HTML文档的头部(
…)、体部(…)或其他位置。脚本语言代码块具体格式如下:
例 4.1 窗体中设置一个按钮,当单击按钮时弹出一个信息框,里面写着“欢迎学习VBScript !”。
Ch4-1.html代码如下:
msgbox "欢迎学习VBScript!"
如图4-1所示:
图4-1 VBScript脚本程序
4.2 VBScript的基本元素
4.2.1 VBScript的数据类型
VBScript 只有一种数据类型,称为Variant 。Variant 是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。它也是VBScript 中所有函数的返回值的数据类型。
最简单的Variant 可以包含数字或字符串信息。Variant 用于数字上下文时作为数字处理,用于字符串上下文时作为字符串处理。
除简单数字或字符串以外,Variant 还可以进一步区分数值信息的特定含义。例如,使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。从Boolean 值到浮点数,数值信息是多种多样的。Variant 包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进Variant 中,而Variant 也会按照最适用于其包含的数据的方式进行操作。Variant 包含的数据子类型见表4-1。
表4-1 Variant包含的数据子类型
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 包含错误号
可以使用转换函数来转换数据的子类型。另外,可使用VarType 函数返回数据的Variant 子类型。
4.2.2 VBScript 常量
常量是在程序执行期间其值不发生改变的量。VBScript 常量一般分为两种,即普通常量(又称文字常量)和符号常量,前者无需定义即可在程序中使用,后者则要用const 语句加以声明才能使用,例如定义符号常量MyString和MyAge:
const MyString = "这是一个字符串。"
const MyAge = 49
日期和时间常量包含在两个井号(#)之间。例如:#7-3-2011#。
VBScript 中有不少系统常量,用户可以直接使用,见表4-2 列举了一些常用的系统
常量。
4-2 常用的系统常量
4.2.3 VBScript 变量
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储脚本运行时可更改的程序信息。例如,可以创建一个名为ClickCount 的变量来存储用户单击 Web 页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在VBScript 中只有一个基本数据类型,即Variant ,因此所有变量的数据类型都是Variant。
1. 变量命名规则
变量命名必须遵循 VBScript 的标准命名规则。变量命名必须遵循如下原则:
(1) 第一个字符必须是字母。
(2) 不能包含嵌入的句点。
(3) 长度不能超过 255 个字符。
(4) 在被声明的作用域内必须惟一。
例如,x、y、btn123都是合法的变量名。2x、a.b都是不合法的变量名。
VBScript有个比较宽松的编码环境,在VBScript中是不区分字母大小写的,所以BUT、But和but都是同一变量。变量在使用前可以声明,也可以不声明就直接使用。
2.声明变量
声明变量的一种方式是使用Dim 语句、Public 语句和Private 语句在脚本中显式声明变量。例如:
Dim x
声明多个变量时,使用逗号分隔变量。例如:
Dim n, m, Left, Right
VBScript也可以事先不声明而直接使用一个变量,变量的类型由赋给它的值的类型来决定,这种方式称为隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。因此,最好将Option Explicit 语句作为脚本的第一条语句,表示必须显式声明所有变量。
3.数组变量
变量名相同而下标不同的一组变量的集合称为数组。如:a(0)、a(1)…a(n)称为a数组。在面向对象的程序设计中用数组来表示同一对象的各种属性或一个对象的所有子对象非常方便,今后要经常使用。
声明数组时用DIM命令。如:
dim A(5)
括号中显示的数字是5,它说明了数组的大小。由于在 VBScript 中所有数组都是基于0 的,所以这个数组实际上包含6个元素,即A(0)、A(1)、A(2)、A(3)、A(4)、A(5)6个变量。每个元素括号中的数字称为下标,代表该元素在数组中的顺序号。
数组并不仅限于一维,数组的最大维数可以是60维。声明多维数组时用逗号分隔括号中的表示数组大小的数字。例如声明x数组如下:
dim x(5,10)
这表明,x是个有6行、11列的二维数组。括号中的第一个数字表示行数,第二个数字表示列数。
此外,VBScript还允许声明动态数组。所谓动态数组就是在运行脚本时大小可变化的数组。声明动态数组时使用空括号:
dim y()
动态数组括号里什么也没有,也就是说数组的上界不确定。当需要调整该动态数组的上界的大小时,可使用ReDim语句。例如:
Redim y(12)
该语句设置动态数组的上界为12,即有13个数组元素。如果需要,还可以再次调整y 数组的上界,如:
Redim y(20)
将y数组的上界调整为20 。
重新调整动态数组大小的次数没有限制。不过,将数组大小调整时,将会丢失被删除元素的数据。
4.2.4 VBScript的运算符和表达式
运算是对数据进行加工的过程。描述各种不同运算的符号称为运算符。在VBScript中运算符有算术运算符、比较运算符、字符串连接运算符和逻辑运算符。
1.算术运算符
VBScript有7个算术运算符,如表4-3。
表4-3 算术运算符
的使用方法。
例4.2 一个圆的半径为3cm,编程计算圆周长。
ch4-2.html中代码如下:
dim r,pi
r=3
pi=3.1416
msgbox(2*pi*r)
程序运行结果如图4-2。
图4-2 算术运算
2.比较运算符
VBScript有7个比较运算符,用于比较表达式。比较运算的结果为逻辑值,见表4-4。
表4-4 比较运算符
比较运算的结果都是逻辑值真(true)或假(false)。比较运算常用于选择或循环语句的条件。
表中is是对象引用比较运算符。它并不比较对象的值,而只是判断两个对象引用的是否为同一对象。
下面举例说明表4-4中比较运算符的使用方法。
例4-3 计算表达式3=2的值。
ch4-3.html代码如下:
msgbox(3=2)
运行结果如图4-3。
图4-3 比较运算
读者可以用同样的方法验证表4-4中列出的所有比较运算表达式及其结果。
3.字符串连接运算符
VBScript用于字符串连接的运算符有两个:“&”和“+”,前者比后者功能要强些。
“&”可以将两个字符串连接成一个字符串。例如:
“翠华山” & “风景美如画”,连接后为:“翠华山风景美如画”。
如果在连接符“&”的一侧不是字符类型数据,&会自动将其转化成字符型,然后再连接。例如:
“学习成绩为:” & 95,连接结果为“学习成绩为95”。
而“+”则只能将两个字符型数据连接起来,不能将不是字符型的数据连接。例如:“学习成绩为:”+ 95,系统会出现错误信息。
4.逻辑运算符
VBScript提供的逻辑运算符共6个,见表4-5。
表4-5 逻辑运算符
表4-6 逻辑运算真值表
个开关,其闭合为true,断开为false。d表示电灯,发光为true,不发光为false。
图4-4“and”图4-5“or”
逻辑运算也有优先级:notand→or→xor→equ→imp。
表达式是由运算符将变量、常量按一定规则连接在一起的式子。表达式通过运算得到结果。运算的顺序由运算符决定;运算的结果的数据类型由数据和运算符共同决定。
当一个表达式中出现多种不同类型运算符时,其优先级顺序如下:
算术运算→关系运算→逻辑运算
例如:3+4>4+5 and 9-8<1+2
运算原式:3+4>4+5 and 9-8<1+2
步骤一: 7 > 9 1 < 3
步骤二: false and true
结果: false
4.2.5 VBScript的常用函数
VBScript的常用函数有算术函数、字符串函数、日期时间函数、数据类型转换函数和测试函数等。
1.算术函数
VBScript的算术函数有三角函数、反三角函数、求绝对值、求平方根函数、取整函数、符号函数、对数函数、随即函数等。具体函数名称、使用和举例说明如表4-7所示。
表4-7 VBScript的算术函数
例4-4 产生一个随机数,并取出小数点后两位整数。
ch4-4.html代码如下:
randomize()
x=rnd()
msgbox(int(x*100))
程序运行结果如图4-6。
图4-6 产生两位随机数
本例中产生了两位随即整数。其方法是首先使用了随机数种子函数randomize(),目的是为了产生真正的随机数,而不是伪随机数。接着用x=rnd()语句产生一个大于零小于1的随机小数,并将这个随机数赋给变量x。msgbox(int(x*100))语句是先将这个随即小数乘以100,即产生有两位整数的实数,然后用int()取整,将整数部分取出来输出。
2.字符串函数
VBScript的字符串函数包括截取子字符串函数、删除字符串前后空格函数、计算字符串长度等函数。具体如表4-8。
表4-8 字符串函数
例4-5 身份证号中包含了一个人的许多信息。现有身份证号610104************,试测试身份证号的长度。
ch4-5.html代码如下:
x="610104************"
msgbox(len(x))
程序运行结果如图4-7。
图4-7 身份证号码长度
本例中使用了测试字符串长度函数len(),很方便地测出身份证号码的长度。例4-6 身份证号同上例,取出身份证号码中出生月份。
ch4-6.html代码如下:
x="610104************"
msgbox(mid(x,11,2))
程序运行结果如图4-8。
图4-8 从身份证号中取出月份
3.日期时间函数
VBScript的日期时间函数包括日期函数、年、月、日、时、分、秒等函数。具体如表4-9所示。
表4-9 日期时间函数
例4-7若要在屏幕上显示现在的日期、时间,写出VBScript代码。
ch4-7.html代码为:
document.write "现在的时间是:"& year(now)& "年" & month(date()) &"月"& day(date())&"日"& hour(time())&"点"&minute(timer())&"分"&second(time())&"秒"&"星期"&weekday(date())-1
程序运行结果如图4-9。
图4-9 日期时间函数的应用
4.数据类型转换函数
有时需要将数据类型从一种类型转换成另一种类型,这时就需要用转换函数。VBScript 的转换函数可以将一个数据转换成整型、双精度型、字符型、日期时间型、逻辑型等。具体
函数名称、说明及举例如表4-10所示。
表4-10 数据转换函数
例4-8 数据转换函数举例。
Ch4-8.html代码如下:
x=10: y=30: msgbox(cstr(x)&y)
VBScript程序允许一行内写多条语句,只要各条语句之间用冒号“:”隔开即可。
程序运行结果如图4-10。
图4-10 cstr()函数转换数据
5.测试函数
VBScript还提供了一些测试函数,用来测试数据的各种形态。测试函数返回的值都是逻辑值是(true)或不是(false)。测试函数见表4-11。
表4-11 测试函数
0——Null;1——Empty;2——integer型;3——Long型;5——double型;7——日期时间型;8——字符型;11——逻辑型;
例4-9 有身份证号为“6101041990yyrr6131”,判断身份证号是否全为数字。
ch4-9.html代码如下:
X="6101041990yyrr6131"
msgbox(IsNumeric(x))
程序运行结果如图4-11所示。
图4-11 测试身份证号
4.3 VBScript程序的流程控制
任何一种算法语言,都有三种程序结构:顺序结构、选择结构、循环结构。VBScript 也不例外。
4.3.1顺序结构
顺序结构就是程序按前后自然顺序一条条执行。变量说明语句、注释语句、赋值语句、输入、输出语句等都是最简单的顺序结构语句。
1.变量声明语句
例如:dim x,y(4)
这里声明了一个变量x,一个具有5个元素的数组y。
2.注释语句
VBScript中的注释语句使用“'”。注释语句是非执行语句,计算机不执行任何操作。注释语句在程序中主要起提示作用,它能够使程序更容易被阅读。
例如:dim x,y '声明变量x,y
3.赋值语句
VBScript中的赋值语句使用等号,将等号右边的常量或表达式的值赋给等号左边的变量。
例如:
x=365
就是将365这个值赋给变量x,于是x的值就是365了。
要注意,VBScript中的赋值号和等号相同,这一点不同于JavaScript。赋值和相等是两种不同的运算。X=x+1是将x+1表达式的值赋给等号左边的变量x。但x和x+1不可能相等。要区分开什么时候是赋值、什么时候是比较相等。
例4-10顺序结构程序举例。
Ch4-10.html代码如下:
dim x,y '声明变量x,y
x=10 '给x变量赋值
y=30 '给y变量赋值
msgbox(cstr(x)&y) '将x转换成字符型,用&运算符与数值型变量y链接
程序执行结果如图4-12。
图4-12 顺序结构
本程序中dim x,y是变量声明语句,声明了两个变量x与y。X=10是赋值语句,将10赋给变量x。VBScript注释语句用单引号“'”,这一点不同JavaScript,也不同于HTML,请读者注意。
4.输出数据的语句
在VBScript中有自己的输出语句,也可以使用DOM对象window和document的方法输出数据。
(1)VBScript自己的输出语句是msgbox()。
格式:
Msgbo("信息内容")
执行msgbox命令后弹出对话框,并显示信息内容。其中,信息内容可以是字符串常量、变量等。
例4-11 输出当前的日期时间。
Ch4-11.html代码如下:
msgbox("现在的时间是:" & now)
程序运行结果如图4-13。
图4-13 msgbox输出
Msgbox语句只能在浏览器端使用,不能再服务器端使用。
(2)使用document对象的write方法输出
例4-12 使用document对象的write方法输出当前日期时间。
ch4-13.html代码如下:
document.write("现在的时间是:" & now)
程序运行结果如图4-14。
图4-14 documen.write输出
(3)使用window对象的方法输出
Window的alert、confirm等方法都可以输出数据。以alert方法为例。例4-14 用window对象的alert方法输出当前日期、时间。
ch4-14.html代码如下:
alert("现在的时间是:" & now)
程序运行结果如下:
图4-15 window.alert方法输出
5.输入数据的语句
InputBox是VBScript用来从键盘向运行中的程序输入数据的语句。该语句也是只能在浏览器端使用,不能在服务器端使用。
例4-15 托运费是根据行李的重量来计算的。而每个人的行李重量是不同的。是编写计算托运费程序,20公斤以下1元/公斤,20公斤(含20公斤)以上2元/公斤。
ch4-15代码如下:
x=inputbox("请输入行李重量")
if x>=20 then
w=20+(x-20)*2
else
w=x
end if
alert("您的运费是:" & w & "元")
程序运行结果如图4-16、图4-17。
图4-16 inputBox输入框图4-17 输出行李重量
4.3.2选择结构
晚饭后做什么?没风就去打羽毛球,有风就去散步。生活中经常有这种需要经判断再去选择的情况。可以用框图的方式表达判断,例如:
图4-13 选择结构
用计算机语言表达:
If (无风)
打羽毛球
Else
散步
一.VBScript选择结构的基本格式:
格式一:
If 条件 then 语句1
该语句的含义为如果满足条件,就执行语句1;否则不执行语句1,直接执行该条件语句后边的语句。
例如:if x>4 then y=x
例4-16 网页中有文本框输入身份证号,单击“确认”按钮后检查文本框内容,如图4-18。如果未输入任何数据,则弹出对话框提示“身份证号不能为空!”。
图4-18 输入身份证号
ch4-16.html代码如下:
身份证号:
x=sfzh.value
if x="" then msgbox("身份证号不能为空!")
若不输入任何数据,单击“确定”按钮后会弹出对话框提示,如图4-19。
图4-19 身份证号不能为空
格式二:
If 条件 then
语句1
else
语句2
End if
例4-17输入身份证号界面如图4-14所示。要求验证身份证号,如果不为空,则将身份证号保存到变量b中,否则弹出对话框提示“身份证号不能为空!”
ch4-17.htm代码如下:
身份证号:
x=sfzh.value
if x<>"" then
b=x
else
msgbox("身份证号不能为空!")
end if
什么是VBScript?VBScript的全称是Visual Basic Script,有时也简称为VBS。VBScript是微软开发的一种脚本语言,可以看作是Visual Basic的简化版,目前这种语言广泛应用于网页和ASP程序。与VB不同,VBScript不能生成独立的exe可执行文件,需要由其它软件解释才能运行。有许多软件支持VBScript,比如微软IE浏览器和Office等。VBScript的局限是只能运行于Windows操作系统和基于IE的浏览器,而JavaScript则受到所有网页浏览器的支持,因此JavaScript用的比较多 运算符号 运算符 求幂 ^ 负号 - 乘 * 除 / 整除 \ 求余 Mod 加 + 减 - 字符串连接 & 逻辑运算符 逻辑非 Not 逻辑与 And 逻辑或 Or 逻辑异或 Xor 逻辑等价 Eqv 逻辑隐含 Imp 比较运算符 等于 = 不等于 <> 小于 < 大于 > 小于等于 <= 大于等于 >= 变量 VBScript中变量可以不声明,直接使用。但有时不声明会出错,所以建议养成声明变量的好习惯。变量声明有两种方式——显式与隐式,显式使用Dim、Public、Private语句进行声明,隐式直接使用变量名。使用隐式声明方式的习惯不好,因为这样有时会由于变量名拼错而导致程序运行出现意外,因此,最好在每个脚本开始第一行使用Option Explicit语句强制显式声明所有变量。声明示例如下: Option Explicit Dim i, conn '声明多个变量时用逗号隔开 Public UserName, Password
实验六VBScript脚本语言编程练习 【实验目的】 通过本实验,学会使用VBScript脚本语言中的自定义函数、过程、分支语句和循环语句,编写嵌入VBScript代码的ASP程序和HTML程序。 【实验题目】 1、设PI=3.14,分别用两种方式实现,第一种,定义一个求圆面积的函数,调用它求任意 半径的圆面积;第二种,定义求圆面积的过程,调用半径为6的圆面积;(2个题目) 2、用for—next循环语句,实现1到100的平方和; 3、应用Rnd函数和Select Case语句,实现网页每刷新一次,背景色在四种颜色中随机改 变。代码提示:randomize ChangeColor=int((4*rnd())+1) ‘产生四个随机整数 4、练习使用循环语句的嵌套,编写程序在网页上显示要求的图形; 【实验内容及步骤】 提示:(1)在wwwroot文件夹下利用“记事本”应用程序新建一个空白文本文档,双击打此文档后输入相应代码。 (2)输入完毕后点击“文件”—选择“另存为”选项,在弹出的对话框中“文件名” 处输入“area.asp”,再单击“保存”按钮,在wwwroot文件夹下就出现了一个新的文件area.asp。 (3)按照上个实验介绍的方法浏览网页。 6、练习使用JavaScript脚本语言,编写网页特效程序。 1. 水中倒影.htm
. TypeName及VarType函数介绍,示例程序如下: 可用VarType 函数来返回某个数据的Variant 子类型,如下面的代码: Dim strInput,strVarType,strTypeName strInput="hello world" MsgBox strInput strVarType=VarType(strInput) MsgBox "VarType:"&strVarType strTypeName=TypeName(strInput) MsgBox "TypeName:"&strTypeName 问题:如下三段语句,结果分别是什么? Dim VarTypeCheck VarTypeCheck = VarType(300) MsgBox VarTypeCheck VarTypeCheck = VarType(#10/19/62#) MsgBox VarTypeCheck VarTypeCheck = TypeName("VBScript") MsgBox VarTypeCheck
. Option Explicit 声明,如果变量没有定义就使用要报错: Option Explicit Dim MyDate MyDate = "October 19, 1962" If IsDate(MyDate) then MyShortDate = CDate(MyDate) End if MsgBox MyShortDate 变量的作用域与存活期: Dim strMain Call ChangeValue Sub ChangeValue() Dim strSub strMain="hello world!" MsgBox "strMain InSub:"&strMain strSub="hello liuxiaolin" MsgBox "strSub InSub:"&strSub End Sub MsgBox "strMain in Main:"&strMain MsgBox "strSub in Main:"&strSub 数组的定义: Dim 数组名(n)实际上数据会有n+1个元素,下标从0到n Dim MyArray(10),i For i=0 To 10 MyArray(i)=i MsgBox MyArray(i) Next MsgBox "min is "&LBound(MyArray) '返回数组的最小可用下标 MsgBox "max is "&UBound(MyArray) '返回数组的最大可用上标 利用Redim重新定义数据的大小,加上preserve关键字保存原来数组的内容: Dim MyFamily() ReDim MyFamily(1) MyFamily(0)="0" MyFamily(1)="1" ReDim MyFamily(2)
HTML语言与VBscript语言 一HTML语言 大体结构如下:
基本结构标签: ,表示该文件为HTML文件
,包含文件的标题,使用的脚本,样式定义等,分段标志 ,采用黑体字 ,采用斜体字