标题: VBS中存在两种不同类型的数组?
作者: Demon
链接: https://demon.tw/programming/vbs-different-array.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
某个群里面有人问:VBS二维数组初始化Array函数可以嵌套吗?
很显然Array函数是可以嵌套,但他却说他的例子通不过:
Dim arr(9,9) arr=Array(Array(1,1,1,1),Array(2,4,3,1),Array(4,16,9,1),Array(8,64,27,1))
Microsoft VBScript 运行时错误 (9, 1) : 类型不匹配
很显然这样是错误的,应该把Dim那行去掉。
arr=Array(Array(1,1,1,1),Array(2,4,3,1),Array(4,16,9,1),Array(8,64,27,1)) MsgBox arr(0,0)
但是他又提出了一个新的问题:只是去掉Dim,真的可以了,但无法通过arr(0,0)正常访问,必须用arr(1)(0)这样的形式来访问。
于是他得出一个结论:这已经不是标准数组了。换句话说,VBS里面有两种数组,一种是标准数组,一种是非标准数组。
真的是这样吗?显然不是。Array函数返回的永远是一个一维数组,即使嵌套起来使用也一样,上面的例子中arr是一个一维数组,它的每一个数组元素也是一个一维数组,所以必须用arr(1)(0)来访问,而不能像访问二维数组那样。
可以用下面的代码获取一个数组的维度:
arr=Array(Array(1,1,1,1),Array(2,4,3,1),Array(4,16,9,1),Array(8,64,27,1))
WScript.Echo GetDimension(arr)
Function GetDimension(ByRef a)
'By Demon
'https://demon.tw
If Not IsArray(a) Then Err.Raise 13
On Error Resume Next
Dim i
For i = 1 To 64 '数组的维度最多是64
UBound a, i
If Err.Number <> 0 Then Exit For
Next
GetDimension = i - 1
End Function
上面的代码输出1,证实arr的确是一维数组。
最后顺便提一下,VBS数组的最大维度是64,而不是手册上写的60。
赞赏微信赞赏支付宝赞赏
随机文章:
arr=Array(Array(1,1,1,1),Array(2,4,3,1),Array(4,16,9,1),Array(8,64,27,1))
MsgBox arr(0,0)
MsgBox arr(0,0) 这个能通过吗?arr(0,0)这不是访问二维数组的方法吗?而这个arr不是一维数组吗?
我现在真的迷惑了