VBS中存在两种不同类型的数组?

标签: , , , ,

某个群里面有人问: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
    'http://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。

随机文章:

  1. VBS中TextStream对象的ReadLine方法
  2. 用JavaScript实现PHP的urldecode函数
  3. OpenWrt安装tcpdump抓包
  4. WMI入门教程:第二部分
  5. windows live writer代码高亮插件

一条评论 发表在“VBS中存在两种不同类型的数组?”上

  1. VBS爱好者说道:

    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不是一维数组吗?
    我现在真的迷惑了

留下回复