le problème avec le test de Nan en JavaScript

initialement publié dans la newsletter a Drip of JavaScript.

en JavaScript, la valeur spécialeNaN (signifiant « pas un nombre ») est utilisée pour représenter le résultat d’un calcul mathématique qui ne peut pas être représenté comme un nombre significatif., Par exemple:

Vous êtes également susceptible de courir dans NaN lors de l’utilisation de parseInt ou parseFloat pour extraire un numéro à partir d’une chaîne de caractères, comme dans cet exemple:

en conséquence, les développeurs JavaScript souvent besoin de tester une variable résultat pour voir s’il contient des NaN ou si c’est une valeur raisonnable à la place. Il existe plusieurs façons de vérifier si une valeur est NaN, mais malheureusement, la plupart d’entre elles ne sont pas fiables., Parcourons certains d  » entre eux et voyons comment ils échouent.

La chose logique à faire est de vérifier si le résultat est égal à NaN.

Ce qui se passe ici? En JavaScript, NaN a la particularité d’être la seule valeur qui n’est pas égale à elle-même. Cela signifie que nous ne pouvons pas savoir si une valeur est NaN en vérifiant l’égalité avec NaN car la réponse sera toujours non.

que pourrions-nous essayer d’autre? Que diriez – vous de la fonction isNaN intégrée?,

Génial! Celui-ci semble fonctionner. Et en fait, cela fonctionne dans certaines circonstances. Cependant, malgré le nom, le but de la fonction isNaN n’est pas de vérifier si une valeur est NaN. Au lieu de cela, le but est de vérifier si une valeur ne peut pas être contrainte à un nombre. Pour cette raison, il peut renvoyer des faux positifs., Considérez ce qui suit:

sauf si vous êtes certain que vous ne traiterez qu’avec des nombres ou NaN, la fonction isNaN n’est pas tout à fait adaptée à cet effet.

Cependant, il s’avère que ECMAScript 6 crée une nouvelle fonction dans le but de vérifier si une valeur est NaN. De manière confuse, cette fonction est également appelée isNaN, bien qu’elle soit attachée à l’objet Number plutôt que directement à l’objet global., Il peut être utilisé comme ceci:

Excellent! Nous avons une méthode qui fonctionne vraiment. Malheureusement, Number.isNaN n’est disponible que dans les versions plus récentes de FireFox et Chrome, et n’est pas encore pris en charge dans IE ou d’autres navigateurs majeurs. C’est peut-être une approche viable à l’avenir, mais pour le moment, elle ne peut être utilisée que dans des circonstances très restreintes.

peut-être que nous pouvons vérifier NaN« S type à la place?

Oui, vous »re lecture que correctement., En JavaScript, la valeur NaN est de type number. Que »s ne va pas être très utile.

alors, que pouvons-nous faire pour obtenir quelque chose qui fonctionne correctement, mais qui est également disponible sur plusieurs navigateurs? Rappelez-vous comment j’ai mentionné que NaN est la seule valeur en JavaScript qui n’est pas égale à elle-même? Nous pouvons tirer parti de ce fait.

Actuellement, le meilleur moyen de vérifier si une valeur est NaN est de vérifier si elle n’est pas égale à elle-même. Si oui, alors vous savez que c’est NaN.,

bien sûr, l’utilisation de cette technique n’est pas particulièrement lisible, de sorte qu’il est commun à l’envelopper dans une méthode utilitaire qui communique l’intention plus clairement. Les traits de soulignement et Lo-Dash fournissent des implémentations.

j’espère que cela vous a aidé à mieux comprendre les bizarreries deNaN.

Merci pour la lecture!

Josh Clanton

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *