JavaScript vérifie si la variable existe (est définie/initialisée)

Quelle méthode de vérification de l'initialisation d'une variable est la meilleure/la plus correcte ? (En supposant que la variable puisse contenir n'importe quoi (chaîne de caractères, int, objet, fonction, etc.))

if (elem) { // or !elem

ou

if (typeof(elem) !== 'undefined') {

ou

if (elem != null) {

Vous voulez [l'opérateur typeof][1]. Plus précisément :

if (typeof variable !== 'undefined') {
    // the variable is defined
}

[1] : https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/typeof_Operator

Commentaires (19)

Dans la majorité des cas, vous utiliserez :

elem != null

Contrairement à un simple if (elem), il autorise 0, false, NaN et '', mais rejette null ou undefined, ce qui en fait un bon test général pour la présence d'un argument ou d'une propriété d'un objet.


Les autres contrôles ne sont pas incorrects non plus, ils ont juste des utilisations différentes :

  • if (elem) : peut être utilisé si elem est garanti être un objet, ou si false, 0, etc. sont considérés comme des valeurs "par défaut" (donc équivalent à undefined ou null).

  • typeof elem == 'undefined' peut être utilisé dans les cas où un null spécifié a une signification distincte d'une variable ou d'une propriété non initialisée.

  • C'est la seule vérification qui ne lancera pas d'erreur si elem n'est pas déclaré (c'est-à-dire pas d'instruction var, pas une propriété de window, ou pas un argument de fonction). C'est, à mon avis, plutôt dangereux car cela permet aux fautes de frappe de passer inaperçues. Pour éviter cela, voyez la méthode ci-dessous.


Une comparaison stricte avec les undefined est également utile :

if (elem === undefined) ...

Cependant, comme le global undefined peut être remplacé par une autre valeur, il est préférable de déclarer la variable undefined dans la portée courante avant de l'utiliser :

var undefined; // really undefined
if (elem === undefined) ...

Ou :

(function (undefined) {
    if (elem === undefined) ...
})();

Un avantage secondaire de cette méthode est que les mineurs JS peuvent réduire la variable undefined à un seul caractère, ce qui vous fait gagner quelques octets à chaque fois.

Commentaires (4)

Cela dépend si vous vous souciez simplement du fait que la variable a été définie ou si vous voulez qu'elle ait une valeur significative.

Vérifier si le type est indéfini permettra de vérifier si la variable a déjà été définie.

=== null ou !== null vérifiera seulement si la valeur de la variable est exactement null.

== null ou != null vérifiera si la valeur est undefined ou null.

if(valeur) vérifiera si la variable est undefined, null, 0, ou une chaîne vide.

Commentaires (0)