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