Je suis tombé sur le code suivant :
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Je suis quelque peu novice en JavaScript, mais d'après les autres questions que j'ai lues ici, j'ai l'impression que ce code n'a pas beaucoup de sens.
En particulier, cette réponse déclare que
Vous obtiendrez une erreur si vous accédez à une variable non définie dans un contexte autre quetypeof
.
Mise à jour : La (citation de la) réponse ci-dessus peut être trompeuse. Elle devrait dire "une variable non déclarée" au lieu de "une variable indéfinie" .
Comme je l'ai découvert, dans les réponses de Ryan , maérique y nwellnhof Ainsi, même lorsqu'une fonction n'a pas d'arguments, les variables correspondant à ces arguments sont toujours déclarées. Ce fait prouve également que le premier élément de la liste ci-dessous est faux.
D'après ce que je comprends, les scénarios suivants peuvent se produire :
-
La fonction a été appelée sans arguments, ce qui fait quedata
une variable non définie, et en levant une erreur surdata != null
. -
La fonction a été appelée spécifiquement avec
null
(ouundefined
), comme argument, auquel casdata != null
protège déjà le code interne, rendant&& data !== undefined
inutile. -
La fonction a été appelée avec un argument non nul, dans ce cas elle passera trivialement les deux
data != null
ydata !== undefined
.
Q : Est-ce que je comprends bien ?
J'ai essayé ce qui suit, dans la console de Firefox :
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Je n'arrive pas à trouver un cas où les data !== undefined
après data != null
pourrait être d'une quelconque utilité.
9 votes
Il suffit d'utiliser
if (data)
. C'est un moyen mnémotechnique Javascript pour vérifier sidata
évalue à true.undefined
,null
Les valeurs suivantes, false, 0, chaîne vide, tableau vide et objet ( ?) sans propriétés, sont évaluées à false, le reste est vrai.21 votes
@J0HN - Utilisation
if(data)
signifierait qu'il ne peut pas passerfalse
o0
comme valeurs pourdata
.0 votes
@J0HN De plus, la même réponse que je mentionne indique également que :
if(typeof someUndefVar == whatever) -- works
yif(someUnderVar) -- error
.2 votes
C'est probablement censé être
data !== null && data !== undefined
ce qui est équivalent àdata != null
ce qui est équivalent àdata != undefined
. La première forme a tendance à être privilégiée car elle est plus explicite quant aux conditions, alors qu'il serait facile de ne pas tenir compte du fait que les deux formes de l'expression " ".null
yundefined
sont vérifiés avec les deux dernières conditions.2 votes
Au fait, des tests explicites pour
undefined
sont, selon l'OMI, une odeur de code. Il ne s'agit pas d'un mot-clé protégé commenull
c'est une variable qui se trouve être indéfinie. Ceci est complètement valide et va casser votre code :undefined = 1
0 votes
@Izkata J'ai lu ici, à une autre occasion, qu'il ne faut pas trop s'embrouiller avec
undefined
comme il peut l'être défini comme vous le soulignez. Depuis lors, j'essaie d'éviter de mentionnerundefined
n'importe où dans mon code, et, quand c'est nécessaire, je vais juste cherchertypeof
ou== null
.0 votes
Petit point de contrariété : "C'est du Javascript mnémotechnique", devrait être "C'est du Javascript idiomatique".
0 votes
@J0HN
Boolean({})
yBoolean([])
sont vraies.