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
}
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.
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.