Проверьте, существует ли объект в VBScript
Я поддерживаю приложение классического ASP, написанное в VB Script внешней компанией давно, давно.
У меня есть массив путей образа, например:
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"
Это будет ТОЛЬКО на страницах с баннерными объявлениями. Существует некоторый стандартный код, который выполняет итерацию через этот список в файле include (общий для всех страниц).
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 Script?
Ответы
Ответ 1
@Atømix: Заменить
If Not banners Is Nothing then
и используйте
If IsObject(banners) Then
Другой код, который вы затем можете поместить в файл include и использовать его в верхней части своих страниц, чтобы избежать ненужного дублирования.
@Cheran S: Я тестировал свои фрагменты выше с помощью Option Explicit
вкл./выкл. и не встречал ошибок для любой версии, независимо от того, был ли там Dim banners
или нет.: -)
Ответ 2
IsObject
может работать, но IsEmpty
может быть лучшим вариантом - он специально предназначен для проверки наличия или инициализации переменной.
Подводя итог:
-
IsEmpty(var)
будет проверять, существует ли переменная (без Object Explicit) или инициализирована
-
IsNull(var)
будет проверять, была ли назначена переменная Null
-
var Is Nothing
будет проверять, была ли переменная Set
до Nothing
, но будет выдавать ошибку, если вы попробуете ее на том, что не является объектом
-
IsObject(var)
будет проверять, является ли переменная объектом (и, по-видимому, будет возвращаться False
, если var
Empty
).
Ответ 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
ed, и вы пытаетесь протестировать IsEmpty(banners)
, вы получите ошибку времени выполнения. Если у вас нет Option Explicit
, вам не должно быть никаких проблем.
edit: Я только что видел этот вопрос и ответ, который тоже может помочь.
Ответ 4
На каждой странице должно быть не менее dim banners
.
У вас нет head.asp
или что-то, что включено в каждую страницу?
Ответ 5
Ни один из элементов IsEmpty, Is Object, IsNull не работает с параметром "Option Explicit", поскольку stealthyninja выше неверно ответил.
Единственным способом, который я знаю, является "взломать" "Option Explicit" с настройкой "On Error Resume Next", как это делает Tristan Havelick:
Есть ли способ проверить, определена ли функция VBScript?
Ответ 6
Отмечено, что IsMissing()
проверяет, был ли передан необязательный параметр, в этом случае объект, например:
Sub FooBar(Optional oDoc As Object)
'if parameter is missing then simulate it
If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something
...