为什么VarType()为DOM对象返回vbString?

时间:2015-02-26 23:06:06

标签: dom vbscript

我尝试编写嵌入HTML页面的VBScript函数,以便一次将CSS样式更改应用于多个项目。我希望函数接受一个变量数组,其中元素可以是以下两者的混合:

  1. 表示HTML' id'属性
  2. 对document.getElementById()
  3. 的调用返回的对象

    最初,为了解析数组的元素,我尝试使用VarType()检查项是vbString还是vbObject,如果是前者,则调用document.getElementById()来转换id将字符串转换为对象以进行进一步操作。

    我非常惊讶地发现当传递从getElementById()调用返回的DOM对象时,VarType()将总是返回vbString。我不得不切换到使用TypeName(),因为它能够区分实际的String和DOM对象。

    使用其他非DOM对象调用VarType()会返回vbObject,正如预期的那样,为什么它认为DOM对象是字符串?

1 个答案:

答案 0 :(得分:3)

大胆的部分就在于:

  

https://msdn.microsoft.com/en-us/Library/3kfz157h%28v=vs.84%29.aspx

     

VarType函数永远不会返回Array的值。它   始终添加到某个其他值以指示a的数组   特殊类型。 Variant的值仅在具有时返回   已添加到Array的值以指示该参数   VarType函数是一个数组。例如,为。返回的值   整数数组计算为2 + 8192或8194. 如果是对象   有一个默认属性,VarType(object)返回它的类型   默认属性。

这是一个测试:

Class ObjWithDefaultProperty
    Public Default Property Get Self
        Self = "string"
    End Property
End Class

Class ObjWithoutDefaultProperty

End Class

Dim with_default
Set with_default = New ObjWithDefaultProperty

Dim with_no_default
Set with_no_default = New ObjWithoutDefaultProperty

MsgBox VarType(with_default) 'Returns vbString
MsgBox VarType(with_no_default) 'Returns vbObject

解决方法:

Function VarTypeEx(var)
    If IsObject(var) Then
        VarTypeEx = vbObject
    Else
        VarTypeEx = VarType(var)
    End If
End Function