J'ai rencontré le code suivant:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Je suis un peu nouveau dans JavaScript, mais, d'après d'autres questions que j'ai lues ici, j'ai l'impression que ce code n'a pas beaucoup de sens.
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. Il devrait dire «une variable non déclarée» , au lieu de «une variable non définie» .
Comme je l'ai découvert, dans les réponses de Ryan ♦ , maerics et nwellnhof , même si aucun argument n'est fourni à une fonction, ses variables pour les arguments sont toujours déclarées. Ce fait prouve également faux le premier élément de la liste ci-dessous.
D'après ce que je comprends, les scénarios suivants peuvent être rencontrés:
La fonction a été appelée sans argument, créant ainsidata
une variable non définie et 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, le rendant&& data !== undefined
inutile.La fonction a été appelée avec un argument non nul, auquel cas elle passera trivialement à la fois
data != null
etdata !== undefined
.
Q: Ma compréhension est-elle correcte?
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 ne peux pas comprendre un cas où l' data !== undefined
après data != null
pourrait être d'une quelconque utilité.
if(data)
signifierait qu'il ne peut pas passer false
ou 0
comme valeurs pour data
.
if(typeof someUndefVar == whatever) -- works
et if(someUnderVar) -- error
.
data !== null && data !== undefined
, ce qui équivaut à data != null
ce qui équivaut à data != undefined
. La première forme a tendance à être favorisée car elle est plus explicite sur les conditions, alors qu'il serait facile d'oublier les deux null
et undefined
qu'elles sont vérifiées avec les deux dernières conditions.
undefined
IMO sont une odeur de code. Ce n'est pas un mot-clé protégé comme null
, c'est une variable qui se trouve être indéfinie. Ceci est tout à fait valide et va casser votre code:undefined = 1
if (data)
. C'est un moyen Javascript mnémotechnique pour vérifier si ladata
variable vaut true.undefined
,null
, Faux, 0, chaîne vide, tableau vide et objet (?) Sans propriété est évaluée à false, le reste est vrai.