首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么VarType()总是返回数组的8204

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

Stack Overflow用户
提问于 2015-05-28 16:16:50
回答 3查看 17.4K关注 0票数 11

在VBScript的MSDN VarType函数的中,它说(用粗体强调):

“备注VarType函数本身从不返回数组的值。它总是添加到其他值中以指示特定类型的数组。只有将变量的值添加到数组的值中,以指示VarType函数的参数是数组。例如,整数数组返回的值为2+ 8192,或8194。如果对象具有默认属性,则VarType ( object )返回其默认属性的类型。”

代码,如

代码语言:javascript
运行
复制
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)))

返回

代码语言:javascript
运行
复制
2 
2
2
8204 - 8192 = 12 
8204 - 8192 = 12
2

I1 - I3都返回正确的vbInteger,当单独在数组中引用时,也返回vbInteger,但是数组坚持它是一个vbVariant数组。

除非我在这里完全遗漏了一些东西,否则尽管有文档,仍然没有办法创建一个数组,其中的项都是相同的类型,并且让VarType将其识别为vbVariant数组以外的任何东西。

我觉得这应该已经是一个问题了,但我在这里找了一个空的搜索,所以如果我错过了现有的问题,请随意链接。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-28 16:49:54

来自文档

在VBScript中,变量总是由一种基本数据类型变体组成。

变量中包含的数据可以是任何类型,但是变量本身总是Variant类型。使用VarType检查数组位置的内容将返回包含的数据类型。但是数组本身是Variant类型的“单元”的混合物。

因此,在您的示例中,VarType将返回vbArray (8192) + vbVariant (12) = 8204

票数 16
EN

Stack Overflow用户

发布于 2015-05-28 16:52:56

这只是文档中的一个错误:

代码语言:javascript
运行
复制
==>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

==>
票数 1
EN

Stack Overflow用户

发布于 2020-11-25 01:07:21

虽然VBscript缺乏语法来声明“变体数组”以外的任何类型的数组,但它的变体类型和变体数组类型并没有受到这种限制。变体类型是COM类型,AKA是Visual 4+类型,AKA是Excel ( Excel单元格类型)的版本。

您可以通过在外部创建的数组上使用VBscript "vartype“返回任何其他类型的数组类型:

代码语言:javascript
运行
复制
obj = CreateObject("System.IO.MemoryStream")
obj.SetLength 0
obj.WriteByte 1
obj.WriteByte 2

A = obj.ToArray() 
wscript.echo vartype(A)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30511987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档