Ich verwalte eine klassische ASP - App, die vor langer, langer Zeit von einer externen Firma in VB - Skript geschrieben wurde.
Ich habe eine Reihe von Imagefile-Pfaden wie folgt:
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"
Dies gilt NUR für Seiten mit Banneranzeigen. Es gibt einige Standardcodes, die diese Liste in einer Include-Datei durchlaufen (die für alle Seiten gilt).
If Not banners Is Nothing then
' then loop through the Dictionary and make a list of image links
End if
Das Problem ist, dass, wenn banners
nicht auf der Seite instanziiert wird (nicht auf allen Seiten), der Fehler Can't find object
angezeigt wird
Wie kann ich prüfen, ob ein Objekt im Skript VB vorhanden ist?
@ Atømix: Ersetzen
If Not banners Is Nothing then
und verwenden
If IsObject(banners) Then
Ihren anderen Code können Sie dann in eine Include-Datei einfügen und oben auf Ihren Seiten verwenden, um unnötige Duplizierungen zu vermeiden.
@Cheran S: Ich habe meine obigen Ausschnitte mit Option Explicit
ein/aus getestet und habe bei beiden Versionen keine Fehler festgestellt, unabhängig davon, ob Dim banners
vorhanden war. :-)
IsObject
könnte funktionieren, aber IsEmpty
könnte eine bessere Option sein. Sie soll insbesondere prüfen, ob eine Variable existiert oder initialisiert wurde.
Zusammenfassen:
IsEmpty(var)
testet, ob eine Variable existiert (ohne Object Explicit) oder initialisiert istIsNull(var)
testet, ob eine Variable Null
zugewiesen wurde.var Is Nothing
testet, ob eine Variable Set
in Nothing
war, gibt aber einen Fehler aus, wenn Sie sie an etwas ausprobieren, das kein Objekt istIsObject(var)
testet, ob eine Variable ein Objekt ist (und gibt anscheinend noch False
zurück, wenn var
Empty
ist).Wenn eine Variable zwar deklariert, aber nicht initialisiert wird, lautet ihr Wert Empty
, den Sie mit der Funktion IsEmpty()
überprüfen können:
Dim banners
If IsEmpty(banners) Then
Response.Write "Yes"
Else
Response.Write "No"
End If
' Should result in "Yes" being written
banners
ist nur gleich Nothing
, wenn Sie diesen Wert explizit mit Set banners = Nothing
zuweisen.
Sie haben jedoch Probleme mit dieser Technik, wenn Sie Option Explicit
aktiviert haben (was die Empfehlung ist, aber nicht immer der Fall ist). Wenn banners
nicht Dim
ed ist und Sie versuchen, IsEmpty(banners)
zu testen, wird in diesem Fall ein Laufzeitfehler angezeigt. Wenn Sie Option Explicit
nicht aktiviert haben, sollten Sie keine Probleme haben.
edit: Ich habe gerade diese bezogene Frage und Antwort gesehen die auch helfen könnte.
Etwas verwandt ist IsMissing()
, um zu testen, ob ein optionaler Parameter übergeben wurde, in diesem Fall ein Objekt wie dieses:
Sub FooBar(Optional oDoc As Object)
'if parameter is missing then simulate it
If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something
...
Sie müssen mindestens dim banners
auf jeder Seite haben.
Haben Sie keinen head.asp
oder etwas auf jeder Seite?
Keiner von IsEmpty, Is Object, IsNull arbeitet mit der "Option Explicit" -Einstellung, da Stealthyninja oben irreführend geantwortet hat. Die einzige Möglichkeit, die ich kenne, ist, die 'Option Explicit' mit dem 'On Error Resume Next' zu "hacken" Einstellung, wie es Tristan Havelick schön tut: Gibt es eine Möglichkeit zu überprüfen, ob eine VBScript-Funktion definiert ist?