Tester si une variable existe en Javascript
En Javascript, le fait d'utiliser une variable qui n'existe pas, dans une comparaison ou condition (if) par exemple, provoque une erreur :
ReferenceError: variable is not defined
Pour éviter cette erreur, il faut tester l'existence de la variable avant de l'utiliser. Pour cela, il y a plusieurs solutions
typeof undefined
En javascript, la fonction typeof
permet comme son nom l'indique d'obtenir le type d'une variable qu'on lui passe en paramètre, sous forme de chaine de caractères :
var chaine = 'salut'; console.log( typeof(chaine) ); // string var entier = 20; console.log( typeof(entier) ); // number var date = new Date(); console.log( typeof(date) ); // object var array = ['lion', 'aigle', 'girafe']; console.log( typeof(array) ); // object console.log( typeof(variableInexistante) ); // undefined
Le fait de passer une variable qui n'existe pas en paramètre à typeof ne provoque pas d'erreur, ont peut donc l'utiliser pour tester l'existence d'une variable :
if( typeof(variableInexistante) == 'undefined' ){ alert("variableInexistante n'existe pas !"); } else { alert("variableInexistante = " + variableInexistante); }
Voilà l'exemple en live sur jsBin : http://jsbin.com/eqicuv/1/edit.
Voici un billet similaire qui vous permettera d'en savoir plus sur créer un calendrier automatique avec excel.
try catch
L'autre solution, beaucoup plus propre et conforme aux bonnes pratiques, c'est d'utiliser le mécanisme des exceptions de Javascript.
try{ alert("variableInexistante = " + variableInexistante); } catch(ex){ alert("variableInexistante n'existe pas ! (erreur javascript : "+ex.toString()+")"); }
Dans le code ci-dessus, javascript va d'abord tenter d'exécuter le code dans le try. Si une erreur survient pendant l'exécution de ce bloc try, une exception va être levée.
Comme on a mis un catch après le try, on va pouvoir récupérer cette exception (et ainsi empêcher qu'elle ne remonte sans être gérée), et effectuer un traitement spécifique. Ici on se contente d'afficher le message de l'exception.
Encore faim ? allez lire ça : tête de télé !
Sinon pour on peut utiliser l'opérateur logique "!" pour gagner quelques octets. Non ?
Thomas