代码之家  ›  专栏  ›  技术社区  ›  Armstrongest

检查vbscript中是否存在对象

  •  16
  • Armstrongest  · 技术社区  · 15 年前

    很久以前,我一直在维护一个外部公司用VB脚本编写的经典ASP应用程序。

    我有一个图像文件路径数组,如下所示:

    dim banners, arrKeys, i
    set banners=CreateObject("Scripting.Dictionary")
    banners.Add "banner1.jpg", "http://www.somelink.com"
    banners.Add "banner2.jpg", "http://www.somelink.com"
    banners.Add "banner3.jpg", "http://www.somelink.com"
    

    这将只存在于有横幅广告的页面上。有一些标准代码在包含文件(所有页面通用)中迭代此列表。

    If Not banners Is Nothing then 
      ' then loop through the Dictionary and make a list of image links
    End if
    

    问题是如果 banners 不是在页面上实例化的(不是在所有页面上),我得到一个 Can't find object 错误

    检查VB脚本中是否存在对象的正确方法是什么?

    6 回复  |  直到 9 年前
        1
  •  32
  •   stealthyninja michkra    15 年前

    @AT_混合:更换

    If Not banners Is Nothing then 
    

    和使用

    If IsObject(banners) Then 
    

    然后您可以将其他代码放入一个include文件中,并在页面顶部使用它,以避免不必要的重复。

    @Cheran S:我用 Option Explicit 打开/关闭,并且没有遇到任何版本的错误,无论是否 Dim banners 有没有。-)

        2
  •  26
  •   Hannele    12 年前

    IsObject 可以,但是 IsEmpty 可能是一个更好的选项-它专门用于检查变量是否存在或是否已初始化。

    总结如下:

        3
  •  3
  •   Community Mohan Dere    9 年前

    如果变量已声明但未初始化,则其值将 Empty ,您可以通过 IsEmpty() 功能:

    Dim banners
    If IsEmpty(banners) Then
        Response.Write "Yes"
    Else
        Response.Write "No"
    End If
    ' Should result in "Yes" being written
    

    banners 只等于 Nothing 如果您显式地将该值赋给 Set banners = Nothing .

    不过,如果你有这种技巧,你会有问题的。 Option Explicit 打开(这是建议,但并非总是如此)。在这种情况下,如果 横幅 还没有 Dim Ed和你试着测试 IsEmpty(banners) ,您将得到一个运行时错误。如果你没有 选项显式 你不应该有任何问题。

    编辑:我刚看到这个 related question and answer 这也会有帮助。

        4
  •  0
  •   Eduardo Molteni    15 年前

    你至少需要 dim banners 在每一页。

    你没有 head.asp 还是每页都有什么内容?

        5
  •  0
  •   Community Mohan Dere    9 年前

    这两个词都不是宾语,完全不需要使用“选项显式”设置,因为上面的隐身术回答错误。 我知道的唯一方法是用“出错时继续下一步”设置“黑客”选项显式,正如Tristan Havelick在这里做的很好: Is there any way to check to see if a VBScript function is defined?

        6
  •  0
  •   Elliptical view    9 年前

    有些关系是 IsMissing() 要测试是否传递了可选参数,在本例中是一个对象,如下所示:

    Sub FooBar(Optional oDoc As Object)
    
        'if parameter is missing then simulate it
        If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something
    
    ...