我很久以前就在维护一个由外部公司用 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 脚本中对象是否存在的正确方法是什么?
更换
If Not banners Is Nothing then
并使用
If IsObject(banners) Then
然后,您可以将其他代码放入包含文件中,并在页面顶部使用它,以避免不必要的重复。
我在打开/关闭
Option Explicit
的情况下测试了上面的代码片段,并且无论 Dim banners
是否存在,都没有遇到任何版本的错误。
IsObject
可以工作,但 IsEmpty
可能是更好的选择 - 它专门用于检查变量是否存在或已初始化。
总结一下:
IsEmpty(var)
将测试变量是否存在(没有对象显式),或者是否已初始化IsNull(var)
将测试变量是否已分配给 Null
var Is Nothing
将测试变量是否已从 Set
变为 Nothing
,但如果您在非对象上尝试它,则会抛出错误IsObject(var)
将测试变量是否是对象(如果 False
是 var
,显然仍会返回
Empty
)。如果声明了变量但未初始化,则其值将为
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
,应该不会有任何问题。
编辑:我刚刚看到这个相关的问题和答案,这也可能有帮助。
有点相关的是
IsMissing()
测试是否传递了可选参数,在本例中是一个对象,如下所示:
Sub FooBar(Optional oDoc As Object)
'if parameter is missing then simulate it
If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something
...
IsEmpty、Is Object、IsNull 都不能与“Option Explicit”设置一起使用,正如上面的 Stealthyninja 所误导的答案。 我知道的唯一方法是使用“On Error Resume Next”设置来“破解”“Option Explicit”,正如 Tristan Havelick 在这里所做的那样: 有什么方法可以检查 VBScript 函数是否已定义?
每页至少需要有
dim banners
。
每页上都没有
head.asp
或其他内容吗?