Je pense que le moyen le plus efficace de tester la "valeur est nullou 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_variableavoir é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, typeofpeut 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' eqnulloption 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_variableestfalseou0ou ...