【问题标题】:Why does VarType() return vbString for DOM objects?为什么 VarType() 为 DOM 对象返回 vbString?
【发布时间】:2015-02-27 07:28:23
【问题描述】:

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

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

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

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

调用 VarType() 与其他非 DOM 对象一样返回 vbObject,为什么它认为 DOM 对象是字符串?

【问题讨论】:

    标签: dom vbscript


    【解决方案1】:

    粗体部分是你所在的位置:

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

    VarType 函数永远不会单独返回 Array 的值。它 总是添加到某个其他值以指示一个数组 特定类型。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2020-01-18
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多