Je maintiens une application classique ASP écrite dans le script VB par une société externe il y a très longtemps.
J'ai un tableau de chemins de fichiers image, comme ceci:
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"
Cela existera UNIQUEMENT sur les pages qui ont des bannières publicitaires. Il existe un code standard qui parcourt cette liste dans un fichier à inclure (commun à toutes les pages).
If Not banners Is Nothing then
' then loop through the Dictionary and make a list of image links
End if
Le problème est que si banners
n'est pas instancié sur la page (ce n'est pas sur toutes les pages), j'obtiens une erreur Can't find object
Quelle est la manière appropriée de vérifier si un objet existe dans le script VB?
@ Atømix: Remplacer
If Not banners Is Nothing then
et utilise
If IsObject(banners) Then
Vous pouvez ensuite placer votre autre code dans un fichier include et l’utiliser en haut de vos pages pour éviter les duplications inutiles.
@Cheran S: J'ai testé mes extraits au-dessus avec Option Explicit
activé/désactivé et je n'ai rencontré aucune erreur pour l'une ou l'autre version, que Dim banners
soit présent ou non. :-)
IsObject
pourrait fonctionner, mais IsEmpty
pourrait être une meilleure option - elle est spécifiquement destinée à vérifier si une variable existe ou a été initialisée.
Résumer:
IsEmpty(var)
testera si une variable existe (sans Object Explicit) ou est initialiséeIsNull(var)
testera si une variable a été affectée à Null
var Is Nothing
testera si une variable a été Set
à Nothing
, mais émettra une erreur si vous l'essayez sur quelque chose qui n'est pas un objetIsObject(var)
testera si une variable est un objet (et retournera apparemment toujours False
si var
est Empty
).Si une variable est déclarée mais non initialisée, sa valeur sera Empty
, que vous pouvez vérifier avec la fonction IsEmpty()
:
Dim banners
If IsEmpty(banners) Then
Response.Write "Yes"
Else
Response.Write "No"
End If
' Should result in "Yes" being written
banners
ne sera égal à Nothing
que si vous lui attribuez explicitement cette valeur avec Set banners = Nothing
.
Vous aurez cependant des problèmes avec cette technique si vous avez activé Option Explicit
(ce qui est recommandé, mais ce n’est pas toujours le cas). Dans ce cas, si banners
n'a pas été Dim
ed et que vous essayez de tester IsEmpty(banners)
, vous obtiendrez une erreur d'exécution. Si vous n'avez pas Option Explicit
activé, vous ne devriez pas avoir de problèmes.
edit: Je viens de voir cette question liée à la question et à la réponse qui pourrait également aider.
IsMissing()
permet de vérifier si un paramètre facultatif a été passé, dans ce cas un objet, comme ceci:
Sub FooBar(Optional oDoc As Object)
'if parameter is missing then simulate it
If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something
...
Vous devez avoir au moins dim banners
sur chaque page.
N'avez-vous pas un head.asp
ou quelque chose d'inclus sur chaque page?
Aucune des méthodes IsEmpty, Is Object, IsNull avec le paramètre "Option Explicit", comme stealthyninja ci-dessus a répondu de manière erronée .. La seule façon que je connaisse consiste à "pirater" le "Option Explicit" avec le "Sur erreur, reprise suivante" comme le fait bien ici Tristan Havelick: Y at-il un moyen de vérifier si une fonction VBScript est définie?