Récemment en JavaScript, j'ai pris l'habitude d'utiliser
if(data !== "")
vérifier si les données sont nulles || non défini || chaîne vide.
Quand j'essaie d'utiliser
if(data !== null)
//work here
Resharper jette une horrible erreur sur moi en disant que le
"le qualificatif peut être nul ou non défini"
J'ai ajouté un jFiddle juste pour préciser: JsFiddle
Ma question est la suivante: S'agit-il d'une erreur ReSharper ou y a-t-il quelque chose derrière cela?
En bref, une var
est null
quand elle ne pointe pas nulle part. En revanche, une var
égale à ""
est une var définie pointant vers une variable contenant une chaîne vide. C'est essentiellement différent.
[EDIT] Comme @ jfriend00 l'indique correctement, null
est une valeur spécifique en javascript. La différence serait alors que null
est une valeur différente de ""
, qui est une chaîne vide et n'est donc pas nulle.
La valeur correcte pour un var
qui n'est pas initialisé est undefined
.
Tout d'abord, votre habitude est fausse. En utilisant:
if(data !== "")
Ne cherchera qu'une chaîne vide. Si data
est undefined
ou null
, le bloc if est toujours exécuté car !==
vérifie l'égalité sans effectuer de conversion de type.
Deuxièmement, ReSharper n'a pas de problème. Il essaie de vous dire que vous faites peut-être une erreur. if(data !== null)
vérifiera uniquement avec null. undefined
et une chaîne vide renverront toujours true et provoqueront l'exécution du bloc. ReSharper vous avertit que vous pouvez faites une erreur (car vous avez rarement besoin de vérifier simplement null
).
Rappelez-vous simplement que undefined !== null !== ""
. Vous pouvez essayer plusieurs des raccourcis mentionnés, mais si vous voulez vraiment que votre code soit complet, vérifiez simplement les trois. Si vous craignez que le code soit trop long, déplacez le contrôle vers une méthode utilitaire:
function hasValue(var data) {
return (data !== undefined) && (data !== null) && (data !== "");
}
Null et indéfini peuvent être traités de la même manière
if (typeof data === "undefined")
retournera true si les données ne sont pas définies (ou nulles), donc
if (typeof data !== "undefined")
retournera true si les données ont été définies (donc n'est pas null), alors vous pouvez vérifier si c'est une chaîne vide,
if (data.length == 0)
retournera true si la chaîne est vide.
Est-ce une erreur ReSharper ou y a-t-il quelque chose derrière cela?
L'erreur peut être renvoyée à cause d'une linter dans resharper.
Pour vérifier si les données sont nulles || non défini || chaîne vide, vous pouvez mettre en cohérence la valeur des données avec un booléen (implicitement fait par js):
if(!data) //implicit coercion
ou le faire explicitement:
if(!Boolean(data)){ //same as above
//if data is a falsy value (false, 0, null , undefined, NaN, '' or ""), run
}
Vous pouvez consulter la liste des valeurs de vérité et de fausseté ici
Cela peut sembler évident, mais si vous n'avez pas compris certains des concepts ci-dessus, vous devriez les rechercher sur Google afin de mieux comprendre la langue, bravo.