Je pense que la manière la plus efficace de tester la "valeur" est de null
o 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 exige que some_variable
a été déclarée, sinon une ReferenceError sera déclenchée. Cependant, dans de nombreux cas d'utilisation, vous pouvez supposer que cela est sûr :
vérifier les arguments optionnels :
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 les variables globales non déclarées (il retourne simplement undefined
). Pourtant, ces cas devraient être réduits au minimum pour de bonnes raisons, comme l'explique Alsciende.
Note 2
Cette variante - encore plus courte - est pas équivalent :
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 ===
au lieu de ==
. La solution proposée est une exception à cette règle. Le site Contrôleur de syntaxe JSHint fournit même le eqnull
pour cette raison.
De la Guide de style jQuery :
Les contrôles d'égalité stricts (===) doivent être utilisés au profit de ==. exception est la vérification de la présence d'undefined et de null par le biais de null.
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
EDIT 2021-03 :
De nos jours, la plupart des navigateurs soutenir le Opérateur de coalescence nul ( ??
) et le Affectation logique de la nullité (??=)
qui permet une manière plus concise d'attribuer une d'attribuer une valeur par défaut si une variable est nulle ou indéfinie, par exemple :
if (a.speed == null) {
// Set default if null or undefined
a.speed = 42;
}
peut être écrit sous l'une des formes suivantes
a.speed ??= 42;
a.speed ?? a.speed = 42;
a.speed = a.speed ?? 42;
55 votes
if(some_variable) { ... }
ne s'exécutera pas sisome_variable
estfalse
o0
ou ...1 votes
Bon point ;) Mais disons que je sais qu'il ne peut pas être faux ou 0 et que je veux juste vérifier si je peux l'utiliser dans une certaine logique (comme une chaîne, un tableau, etc.).
0 votes
En rapport : stackoverflow.com/questions/27509/
5 votes
...ou une chaîne vide.
0 votes
Duplicata possible de Comment vérifier la présence d'une chaîne vide en JavaScript ?
0 votes
La 2ème solution sera exécutée si
some_variable
est 0, Faux, ou tout autre type de variable non conforme. C'est très différent de vérifier si quelque chose estundefined
onull