Asp classic 检查VBScript中是否存在对象

Asp classic 检查VBScript中是否存在对象,asp-classic,vbscript,object,Asp Classic,Vbscript,Object,我正在维护一个很久很久以前由外部公司用VB脚本编写的经典ASP应用程序 我有一个imagefile路径数组,如下所示: 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

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

我有一个imagefile路径数组,如下所示:

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

问题是如果
横幅
没有在页面上实例化(不是在所有页面上),我会得到一个
找不到对象
错误


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

如果变量已声明但未初始化,则其值将为
,您可以使用
IsEmpty()
函数进行检查:

Dim banners
If IsEmpty(banners) Then
    Response.Write "Yes"
Else
    Response.Write "No"
End If
' Should result in "Yes" being written
banner
仅当您使用
Set banner=Nothing
明确指定该值时才会等于
Nothing

但是,如果启用了
Option Explicit
(这是建议,但并不总是如此),那么使用这种技术会有问题。在这种情况下,如果
banner
未被
Dim
ed,并且您尝试测试
IsEmpty(banner)
,您将得到一个运行时错误。如果未启用
选项Explicit
,则不会出现任何问题


编辑:我刚刚看到了这一点,这可能也会有所帮助。

你需要在每页上至少有
暗淡的横幅

你不是每页都有
head.asp
或其他东西吗

@Atømix:替换

If Not banners Is Nothing then 
和使用

If IsObject(banners) Then 
然后,您可以将其他代码放入include文件,并在页面顶部使用它,以避免不必要的重复


@Cheran S:我用
选项Explicit
开/关测试了上面的代码片段,无论
暗条是否存在,这两个版本都没有遇到错误。:-)

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

总结如下:

  • 将测试变量是否存在(没有显式对象),或是否已初始化
  • 将测试变量是否已分配给
  • 将测试变量是否已设置为,但如果在非对象的对象上尝试,则将抛出错误
  • 将测试变量是否为对象(如果
    var
    is,显然仍将返回
    False

正如上面的StealthInja误导性地回答的那样,IsEmpty、IsObject和IsNull都不能使用“Option Explicit”设置。 我知道的唯一方法是使用“错误恢复下一步”设置“破解”“选项显式”,就像Tristan Havelick在这里所做的那样:

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

Sub FooBar(Optional oDoc As Object)

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

...

有。。。然而,它的网页指定的横幅和“工作”是在htmlhead.inc。。。因此,对于有横幅的页面,我需要在标题之前设置变量。我知道,这让人困惑。当我不必维护它时,我会很高兴的。是的,这就是问题所在,
横幅
在没有横幅的页面中没有被
dim
med。@Atømix:我忘了再次检查这个问题;它对你有用吗?:-)是的,是的!谢谢VB6是一个有趣的奇妙世界。
IsEmpty
IsObject
(尽管它看起来确实有效)更好。在我的例子中,我还添加了
和not IsNull(横幅)
我相信这是为了检查函数是否已定义,而上面只是为了检查是否存在简单变量。有趣的问题!
Sub FooBar(Optional oDoc As Object)

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

...