在VBScript中获取variables的types

如何使用VBScript获取variables的types?

VarType是你需要的吗?

返回一个指示variables的子types的值。

+--------------+-------+---------------------------------------------+ | Constant | Value | Description | +--------------+-------+---------------------------------------------+ | vbEmpty | 0 | Empty (uninitialized) | | vbNull | 1 | Null (no valid data) | | vbInteger | 2 | Integer | | vbLong | 3 | Long integer | | vbSingle | 4 | Single-precision floating-point number | | vbDouble | 5 | Double-precision floating-point number | | vbCurrency | 6 | Currency | | vbDate | 7 | Date | | vbString | 8 | String | | vbObject | 9 | Automation object | | vbError | 10 | Error | | vbBoolean | 11 | Boolean | | vbVariant | 12 | Variant (used only with arrays of Variants) | | vbDataObject | 13 | A data-access object | | vbDecimal | 14 | Decimal Value | | vbByte | 17 | Byte | | vbLongLong | 20 | LongLong integer (64 bit) | | vbArray | 8192 | Array | +--------------+-------+---------------------------------------------+ 

VarType函数永远不会自己返回Array的值。 它总是添加到其他值来指示一个特定types的数组。 Variant的值只有在被添加到Array的值时才会返回,以指示VarType函数的参数是一个数组。 例如,为整数数组返回的值计算为2 + 8192或8194.如果对象具有默认属性,则VarType(object)将返回其默认属性的types。

如果要使用Set获取分配给variables的对象的types名称,则可以使用TypeName

 Class SomeClass '' empty class End Class Dim x Set x = New SomeClass WScript.Echo TypeName(x) '' displays "SomeClass" 

Tmdean的答案也可以得到(几乎)所有其他typesvariables的types名称(不是整数)(每个http://msdn.microsoft.com/en-us/library/ie/y58s1cs6%28v=vs .84%29.aspx )

 dim i,s,a i = 1 s = "Hello world" a = split("Hello World"," ") WScript.Echo TypeName(i) 'Displays "Integer" WScript.Echo TypeName(s) 'Displays "String" WScript.Echo TypeName(a) 'Displays "Variant()" 
 Dim a, b, c, d, e, f a = 10 b = "text" c = Split("John Doe,Jane Smith,Dick Tracy", ",") d = 1.2 e = Null f = True MsgBox "'a' is " & fVarType(a) & vbNewLine & _ "'b' is " & fVarType(b) & vbNewLine & _ "'c' is " & fVarType(c) & vbNewLine & _ "'d' is " & fVarType(d) & vbNewLine & _ "'e' is " & fVarType(e) & vbNewLine & _ "'f' is " & fVarType(f) & vbNewLine & _ "'g' is " & fVarType(c(0)) Function fVarType(x) Const ArrayCode = 8192 Dim y y = VarType(x) If y < ArrayCode Then fVarType = fGetType(VarType(x)) Else fVarType = "vbArray with " & fGetType(VarType(x)- ArrayCode) & " elements" End If End Function Function fGetType(vType) Select Case vType Case 0 fGetType = "vbEmpty" Case 1 fGetType = "vbNull" Case 2 fGetType = "vbInteger" Case 3 fGetType = "vbLong" Case 4 fGetType = "vbSingle" Case 5 fGetType = "vbDouble" Case 6 fGetType = "vbCurrency" Case 7 fGetType = "vbDate" Case 8 fGetType = "vbString" Case 9 fGetType = "vbObject" Case 10 fGetType = "vbError" Case 11 fGetType = "vbBoolean" Case 12 fGetType = "vbVariant" Case 13 fGetType = "vbDataObject" Case 14 fGetType = "vbDecimal" Case 17 fGetType = "vbByte" Case Else fGetType = "undetected" End Select End Function 

vartype是合适的…

 Dim x x=123 msgbox VarType(x) 
 Dim TypeDictionary Set TypeDictionary = CreateObject("Scripting.Dictionary") TypeDictionary.Add 0, "vbEmpty" TypeDictionary.Add 1, "vbNull" TypeDictionary.Add 2, "vbInteger" TypeDictionary.Add 3, "vbLong" TypeDictionary.Add 4, "vbSingle" TypeDictionary.Add 5, "vbDouble" TypeDictionary.Add 6, "vbCurrency" TypeDictionary.Add 7, "vbDate" TypeDictionary.Add 8, "vbString" TypeDictionary.Add 9, "vbObject" TypeDictionary.Add 10, "vbError" TypeDictionary.Add 11, "vbBoolean" TypeDictionary.Add 12, "vbVariant" TypeDictionary.Add 13, "vbDataObject" TypeDictionary.Add 17, "vbByte" Public Function GetType(argument) GetType = TypeDictionary.Item(VarType(argument)) End Function 

这个版本花费了更多的精力来设置词典,然后在一次检查中(手指交叉)查找任何types,而不是每次检查每一种types。

等效的JScript代码(假设,因为JScript有typeof,并且缺less许多vbtypes):

 var TypeDictionary = { 0: 'vbEmpty', 1: 'vbNull', 2: 'vbInteger', 3: 'vbLong', 4: 'vbSingle', 5: 'vbDouble', 6: 'vbCurrency', 7: 'vbDate', 8: 'vbString', 9: 'vbObject', 10: 'vbError', 11: 'vbBoolean', 12: 'vbVariant', 13: 'vbDataObject', 17: 'vbByte' }; var GetType = function() { return TypeDictionary[arguments[0]]; };