检查 VBScript 中是否存在对象

问题描述 投票:0回答:6

我很久以前就在维护一个由外部公司用 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 脚本中对象是否存在的正确方法是什么?

asp-classic vbscript object
6个回答
44
投票

更换

If Not banners Is Nothing then 

并使用

If IsObject(banners) Then 

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

我在打开/关闭

Option Explicit
的情况下测试了上面的代码片段,并且无论
Dim banners
是否存在,都没有遇到任何版本的错误。


32
投票

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

总结一下:


6
投票

如果声明了变量但未初始化,则其值将为

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
,应该不会有任何问题。

编辑:我刚刚看到这个相关的问题和答案,这也可能有帮助。


2
投票

有点相关的是

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

Sub FooBar(Optional oDoc As Object)

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

...

1
投票

IsEmpty、Is Object、IsNull 都不能与“Option Explicit”设置一起使用,正如上面的 Stealthyninja 所误导的答案。 我知道的唯一方法是使用“On Error Resume Next”设置来“破解”“Option Explicit”,正如 Tristan Havelick 在这里所做的那样: 有什么方法可以检查 VBScript 函数是否已定义?


0
投票

每页至少需要有

dim banners

每页上都没有

head.asp
或其他内容吗?

© www.soinside.com 2019 - 2024. All rights reserved.