在VBScript的VarType
函数的VarType
MSDN Microsoft文档中(大胆强调):
“备注VarType函数永远不会返回Array by的值 本身。它总是被添加到一些其他值以指示数组 一种特殊的类型。 Variant的值仅在具有时返回 已添加到Array的值以指示该参数 VarType函数是一个数组。 例如,返回的值为 整数数组计算为2 + 8192或8194 。如果一个对象有 默认属性VarType(object)返回其默认类型 属性“。
BUT
代码如
Dim A,I1, I2, I3
I1 = 1
I2 = 2
I3 = 3
A = Array(I1,I2,I3)
Dim A2
A2 = Split("Test,Test,Test",",")
AT = VarType(A)
AT2 = VarType(A2)
IT1 = VarType(I1)
IT2 = VarType(I2)
IT3 = VarType(I3)
WScript.Echo IT1
WScript.Echo IT2
WScript.Echo IT3
WScript.Echo AT & " - 8192 = " & AT - 8192
WScript.Echo AT2 & " - 8192 = " & AT2 - 8192
WScript.Echo CStr(VarType(A(2)))
返回
2
2
2
8204 - 8192 = 12
8204 - 8192 = 12
2
I1
- I3
ALL返回正确的vbInteger
AND,当在数组中单独引用时,也返回vbInteger
,但数组仍然保证它是{{1}的数组1}}。
除非我在这里完全遗漏了某些东西,否则在文档的SPITE中似乎没有办法创建一个数组,其中的项目都是SAME类型的全部,并vbVariant
将其识别为除了数组VarType
。
我觉得这应该是一个问题,但我在这里空洞搜索,如果我错过了现有的问题,请随时链接。
答案 0 :(得分:9)
在VBScript中,变量总是一种基本数据类型, 变体。
变量中包含的数据可以是任何类型,但变量本身始终为Variant
类型。使用VarType
检查数组位置的内容将返回包含的数据类型。但阵列本身是Variant
类型
因此,在您的情况下,VarType
将返回vbArray
(8192)+ vbVariant
(12)= 8204
答案 1 :(得分:1)
这只是文档中的错误:
==>type D:\VB_scripts\SO\30511987.vbs
option explicit
Dim ii, aA(3)
aA(1)=5
aA(2)="string"
aA(3)=Now
Wscript.Echo "array", VarType(aA), TypeName(aA)
For ii=0 To UBound(aA)
Wscript.Echo "aA(" & CStr(ii) & ")", VarType(aA(ii)), TypeName(aA(ii))
Next
==>cscript D:\VB_scripts\SO\30511987.vbs
array 8204 Variant()
aA(0) 0 Empty
aA(1) 2 Integer
aA(2) 8 String
aA(3) 7 Date
==>
答案 2 :(得分:0)
尽管VBscript缺少声明“变体的变量数组”以外的任何类型的数组的语法,但是其变体类型和变体数组类型不受此限制。变体类型是COM类型,又是Visual Basic 4+类型,又是Excel xloper(Excel单元格类型)的版本。
通过在外部创建的数组上使用VBscript“ vartype”,可以返回任何其他类型的数组类型:
{{1}}