为什么VarType()总是为数组返回8204

时间:2015-05-28 16:16:51

标签: arrays vbscript

在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

我觉得这应该是一个问题,但我在这里空洞搜索,如果我错过了现有的问题,请随时链接。

3 个答案:

答案 0 :(得分:9)

来自documentation

  

在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}}