Détails
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) {
1632
3
Vous voulez [l'opérateur
typeof
][1]. Plus précisément :[1] : https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/typeof_Operator
Dans la majorité des cas, vous utiliserez :
Contrairement à un simple
if (elem)
, il autorise0
,false
,NaN
et''
, mais rejettenull
ouundefined
, 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é sielem
est garanti être un objet, ou sifalse
,0
, etc. sont considérés comme des valeurs "par défaut" (donc équivalent àundefined
ounull
).typeof elem == 'undefined'
peut être utilisé dans les cas où unnull
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'instructionvar
, pas une propriété dewindow
, 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 :Cependant, comme le global
undefined
peut être remplacé par une autre valeur, il est préférable de déclarer la variableundefined
dans la portée courante avant de l'utiliser :Ou :
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 exactementnull
.== null
ou!= null
vérifiera si la valeur estundefined
ounull
.if(valeur)
vérifiera si la variable estundefined
,null
,0
, ou une chaîne vide.