在VBScript的MSDN VarType
函数的中,它说(用粗体强调):
“备注VarType函数本身从不返回数组的值。它总是添加到其他值中以指示特定类型的数组。只有将变量的值添加到数组的值中,以指示VarType函数的参数是数组。例如,整数数组返回的值为2+ 8192,或8194。如果对象具有默认属性,则VarType ( object )返回其默认属性的类型。”
但
代码,如
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
都返回正确的vbInteger
,当单独在数组中引用时,也返回vbInteger
,但是数组坚持它是一个vbVariant
数组。
除非我在这里完全遗漏了一些东西,否则尽管有文档,仍然没有办法创建一个数组,其中的项都是相同的类型,并且让VarType
将其识别为vbVariant
数组以外的任何东西。
我觉得这应该已经是一个问题了,但我在这里找了一个空的搜索,所以如果我错过了现有的问题,请随意链接。
发布于 2015-05-28 16:49:54
来自文档
在VBScript中,变量总是由一种基本数据类型变体组成。
变量中包含的数据可以是任何类型,但是变量本身总是Variant
类型。使用VarType
检查数组位置的内容将返回包含的数据类型。但是数组本身是Variant
类型的“单元”的混合物。
因此,在您的示例中,VarType
将返回vbArray
(8192) + vbVariant
(12) = 8204
发布于 2015-05-28 16:52:56
这只是文档中的一个错误:
==>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
==>
发布于 2020-11-25 01:07:21
虽然VBscript缺乏语法来声明“变体数组”以外的任何类型的数组,但它的变体类型和变体数组类型并没有受到这种限制。变体类型是COM类型,AKA是Visual 4+类型,AKA是Excel ( Excel单元格类型)的版本。
您可以通过在外部创建的数组上使用VBscript "vartype“返回任何其他类型的数组类型:
obj = CreateObject("System.IO.MemoryStream")
obj.SetLength 0
obj.WriteByte 1
obj.WriteByte 2
A = obj.ToArray()
wscript.echo vartype(A)
https://stackoverflow.com/questions/30511987
复制相似问题