Je pense que le moyen le plus efficace de tester la "valeur est null
ou undefined
" est
if ( some_variable == null ){
// some_variable is either null or undefined
}
Ces deux lignes sont donc équivalentes:
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
Note 1
Comme mentionné dans la question, la variante courte nécessite d' some_variable
avoir été déclarée, sinon une ReferenceError sera levée. Cependant, dans de nombreux cas d'utilisation, vous pouvez supposer que cela est sûr:
vérifiez les arguments facultatifs:
function(foo){
if( foo == null ) {...}
vérifier les propriétés d'un objet existant
if(my_obj.foo == null) {...}
D'autre part, typeof
peut traiter des variables globales non déclarées (renvoie simplement undefined
). Pourtant, ces cas devraient être réduits au minimum pour de bonnes raisons, comme l'a expliqué Alsciende.
Note 2
Cette variante - encore plus courte - n'est pas équivalente:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
donc
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
Note 3
En général, il est recommandé d'utiliser à la ===
place de ==
. La solution proposée fait exception à cette règle. Le vérificateur de syntaxe JSHint fournit même l' eqnull
option pour cette raison.
À partir du guide de style jQuery :
Des contrôles d'égalité stricts (===) doivent être utilisés en faveur de ==. La seule exception est lors de la vérification de non défini et null par le biais de null.
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
if(some_variable) { ... }
ne s'exécutera pas sisome_variable
estfalse
ou0
ou ...