导航
1.对象(object)子类型
2.复杂数据类型,数组定义以及遍历
3.Option Explicit的介绍
4.变量命名
5.过程sub的语法
6.函数function的语法
7.三个变量作用域
1.对象(object)子类型
对象:含有对象引用的变量就是object子类型,具有属性(properties)与方法(methods)
创建FileSystemObject对象
引用IsObject()函数,销毁对象,对是否销毁进行判断
dim objFSO
dim boolExists
set objFSO = wscript.createobject("scripting.filesystemobject") 'set用于修改对象变量的值
if IsObject(objFSO) then 'isobject判断是否为对象
boolExists = objFSO.fileExists("C:\Users\93997\Desktop\vbs练习\学习") '应当是文件中的东西,单是文件会不存在
msgbox typename(boolExists)
msgbox boolExists
set objFSO = nothing '对象使用完之后要销毁对象,不占内存
if objFSO is nothing then '并且进行判断是否被销毁
msgbox "对象已经被销毁"
endif
end if
————————————————————————————————————————
2.复杂数据类型,数组,定义以及遍历
数组:存放同一类数据类型的数据,最多有六十维
声明:dim arrlist(5)——一维数组,dim arrlist(2,4)——二维数组(列,行)
例如存放下面数组:
小王 | 12 | 男 |
---|---|---|
小花 | 13 | 女 |
第一种方式,静态数组:
'定义数组,初始化数组和遍历数组
dim arrlist(2,4) '定义一个二维数组(列,行)
arrlist(0,0) = "小王" '存储数据
arrlist(0,1) = "12"
arrlist(0,2) = "男"
arrlist(1,0) = "小花"
arrlist(1,1) = "13"
arrlist(1,2) = "女"
第二种方式动态数组,二维数组声明只需要后面加()
'动态定义数组
dim arrlist(),str '定义二维数组名arrlist()后面进行动态开辟,str用于后面输出
Redim preserve arrlist(2,0) '意思是开辟了2列1行
arrlist(0,0) = "小王"
arrlist(1,0) = "12"
arrlist(2,0) = "男" '第一行初始化结束
redim preserve arrlist(2,1) '开辟第二行
arrlist(0,1) = "小花"
arrlist(1,1) = "13"
arrlist(2,1) = "女" '第二行初始化结束
'进行遍历
lngUboud = UBound(arrlist,2) '获取到数组中有几行,然后进行遍历 1为列数 2位行数
for i=0 to lngUboud '遍历0-lngUboud的行数
str = str & arrlist(0,i) & ","
str = str & arrlist(1,i) & ","
str = str & arrlist(2,i) & vbNewLine '加上换行字符
next
msgbox str
运行结果:
删除数组:Erase arrlist
对于静态与动态有细微不同
静态:会将其中数据删除,元素本身依旧存在——只是被清空了,可以** Ubound访问
动态:会将数组元素以及数据全部删除,若想恢复只能使用redim,行列也无法用Ubound**访问了
vbScript只支持一种数据类型varient,但是varient有许多子类型
————————————————————————————————————————
3.Option Explicit的介绍
在vbs中,你可以不声明变量,并且可以随时使用新变量名
不用其的缺点是:假设你并没有定义变量名,在使用过程中如果输入错误的变量名,系统也还是会默认其为新的变量名,并且给它赋新的类型empty,并赋值为0
采用option explicit:系统会要求所有的变量在使用前都要进行显式声明
要养成好习惯加上Option Explicit
————————————————————————————————————————
4.变量命名
1.变量名第一个必须是字母
2.除了_其他符号不允许使用
3.长度不能超过255
4.可以提示这个变量是什么类型如:strname,代表了name是string类型
————————————————————————————————————————
5.过程sub的语法
过程的具体代码块用sub关键字
声明过程:
注意:
在sub前可以加Public或者Private指定状态
实际上vbs是被孤立的文件,外部无法访问,所以Public及Private作用也并不大
没有指定的话就默认为Public
调用无参过程
Option Explicit
print
sub print
msgbox "hello world"
end sub
调用有参过程
Option Explicit
print "mjj" '只需要在后面追加就行
sub print(strUserName) '后面为参数
msgbox "hello " &strUserName
end sub
————————————————————————————————————————
6.函数function的语法
函数语法:
内部耦合越紧密,其复杂性也越高——不要在一个句子中有两个输出
如下:
Option Explicit
GreetUser '调用过程
sub GreetUser '过程
msgbox "hello" & getUserName '在一个句子中既要输出,又要进行输入,那么会先执行函数,再进行打印输出
end sub
function getUserName '函数
getUserName = inputbox("请输入您的名字:") '进行返回值
end function
结论:尽量不要在同一个句子中这样进行输入或者输出
更改一下:
Option Explicit
GreetUser getUserName '调用过程 传入参数
sub GreetUser(strUserName) '过程
msgbox "hello" & strUserName '这样这里只是一个普通的输出
end sub
function getUserName '函数
getUserName = inputbox("请输入您的名字:") '进行返回值
end function
传参数的方式可以放在()中,也可以在后面直接添加
msgbox也可以作为函数,也有返回值
Option Explicit
dim info
info = msgbox("would you like apple",vbYesNo) '返回对应数值
msgbox info
————————————————————————————————————————
7.三个变量作用域
脚本级作用域: 变量不能超过127个
过程级作用域: sub,function 变量不能超过127个
类级作用域: class
private只能在脚本域中或者类级中进行使用
若private在脚本级中使用作用与dim,public作用相同
Option Explicit
private a '用于在脚本级中使用,作用与dim,public作用一样
a = 10
abc
function abc
msgbox a '函数中一样能够访问
end function