Arm*_*est 19 vbscript object asp-classic
很久以前,我正在维护一个由外部公司用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"
Run Code Online (Sandbox Code Playgroud)
这仅存在于包含横幅广告的网页上.有一些标准代码在包含文件中遍历此列表(所有页面都是通用的).
If Not banners Is Nothing then
' then loop through the Dictionary and make a list of image links
End if
Run Code Online (Sandbox Code Playgroud)
问题是如果banners没有在页面上实例化(它不在所有页面上),我会收到Can't find object错误
检查VB脚本中是否存在对象的正确方法是什么?
ste*_*nja 36
@Atømix:替换
If Not banners Is Nothing then
Run Code Online (Sandbox Code Playgroud)
并使用
If IsObject(banners) Then
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其他代码放入包含文件中,并在页面顶部使用它,以避免不必要的重复.
@Cheran S:我用Option Explicit开/关测试了上面的片段,并且没有遇到任何一个版本的错误,无论是否Dim banners存在.:-)
Han*_*ele 27
IsObject可以工作,但IsEmpty可能是一个更好的选择 - 它专门用于检查变量是否存在或已初始化.
总结一下:
IsEmpty(var) 将测试变量是否存在(没有Object Explicit),或者是否已初始化IsNull(var) 将测试是否已分配变量 Nullvar 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
Run Code Online (Sandbox Code Playgroud)
bannersNothing仅当您使用 明确指定该值时才等于Set banners = Nothing。
不过,如果您Option Explicit启用了此技术,您将会遇到问题(这是建议,但情况并非总是如此)。在这种情况下,如果banners尚未进行Dim编辑并且您尝试测试IsEmpty(banners),您将收到运行时错误。如果没有的Option Explicit话,应该不会有任何问题。
编辑:我刚刚看到这个相关的问题和答案,这也可能有帮助。