检查VBScript中是否存在对象

时间:2010-11-04 19:32:35

标签: asp-classic vbscript object

很久以前,我正在维护一个由外部公司用VB Script编写的经典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 个答案:

答案 0 :(得分:33)

@Atømix:替换

If Not banners Is Nothing then 

并使用

If IsObject(banners) Then 

您可以将其他代码放入包含文件并在页面顶部使用,以避免不必要的重复。

@Cheran S:我使用Option Explicit开启/关闭上面的代码段,并且没有遇到任何版本的错误,无论Dim banners是否存在。 : - )

答案 1 :(得分:26)

IsObject可以正常工作,但IsEmpty可能是更好的选择 - 它专门用于检查变量是否存在或已初始化。

总结:

  • IsEmpty(var)将测试变量是否存在(没有Object Explicit),或者是否已初始化
  • IsNull(var)将测试是否已将变量分配给Null
  • var Is Nothing会测试变量是否为SetNothing,但如果您对非对象的内容进行尝试,则会抛出错误
  • IsObject(var)将测试变量是否为对象(如果FalseEmpty,则显然仍会返回var。)

答案 2 :(得分:3)

如果声明了变量但未初始化变量,则其值为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(这是推荐,但并非总是如此),你会遇到问题。在这种情况下,如果banners未被Dim编辑并且您尝试测试IsEmpty(banners),则会出现运行时错误。如果您没有Option Explicit,则不应该有任何问题。

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

答案 3 :(得分:0)

您需要在每个页面上至少dim banners

每个页面上都没有head.asp或其他内容吗?

答案 4 :(得分:0)

IsEmpty,Is Object,IsNull都没有使用“Option Explicit”设置,因为上面的stealthyninja误导性地回答了问题。 我知道的单一方式是使用'On Error Resume Next'设置'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Is there any way to check to see if a VBScript function is defined?

答案 5 :(得分:0)

有些相关的是IsMissing()来测试是否传递了一个可选参数,在这种情况下是一个对象,如下所示:

Sub FooBar(Optional oDoc As Object)

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

...