Tester si une variable existe en Javascript

Janvier 2013

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é !

2 commentaires :
commentaire n°2711 par Thomas Gottvalles
Thomas Gottvalles mardi 17 décembre 2013, 13:12

Sinon pour on peut utiliser l'opérateur logique "!" pour gagner quelques octets. Non ?

if (!variable){
  alert('La variable n\'est pas définie');
} else {
  alert ('La variable est définie');
}

Thomas

commentaire n°2717 par Galdon
Galdon mardi 7 janvier 2014, 11:36
Il vaut mieux éviter ça, ça peut lever des exceptions (ça dépend du navigateur). La seule manière de ne pas lever une exception c'est d'utiliser typeof.
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré