很久以前,我正在维护一个由外部公司用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脚本中是否存在对象的正确方法是什么?
答案 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
会测试变量是否为Set
到Nothing
,但如果您对非对象的内容进行尝试,则会抛出错误IsObject(var)
将测试变量是否为对象(如果False
为Empty
,则显然仍会返回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
...