het probleem met het testen op NaN in JavaScript

oorspronkelijk gepubliceerd in de a Drip of JavaScript nieuwsbrief.

in JavaScript wordt de speciale waarde NaN (wat “geen getal” betekent) gebruikt om het resultaat van een wiskundige berekening weer te geven die niet als een betekenisvol getal kan worden weergegeven., Bijvoorbeeld:

U bent ook waarschijnlijk in de NaN bij gebruik van parseInt of parseFloat uitpakken met een nummer van een reeks, zoals in dit voorbeeld:

Als een resultaat, JavaScript-ontwikkelaars vaak nodig om te testen gevolg variabele om te zien of het bevat NaN of is dit een zinvolle waarde in de plaats. Er zijn verschillende manieren om te controleren of een waarde NaN is, maar helaas zijn de meeste ervan onbetrouwbaar., Laten we eens kijken hoe ze falen.

het logische is om te controleren of het resultaat gelijk is aan NaN.

Wat is hier aan de hand? In JavaScript heeft NaN het verschil dat het de enige waarde is die niet gelijk is aan zichzelf. Dat betekent dat we”t uitzoeken of een waarde NaN is door gelijkheid te controleren met NaN omdat het antwoord altijd nee zal zijn.

Wat kunnen we nog meer proberen? Hoe zit het met de ingebouwde isNaN functie?,

Awesome! Deze lijkt te werken. En in feite werkt het onder sommige omstandigheden. Ondanks de naam is het doel van de functie isNaN niet om te controleren of een waarde NaNis. In plaats daarvan, het doel is om te controleren of een waarde niet kan worden gedwongen om een nummer. Hierdoor kan het false positieven retourneren., Overweeg het volgende:

tenzij u zeker weet dat u alleen met getallen te maken heeft of NaN, is de functie isNaN niet geschikt voor dit doel.

Het blijkt echter dat ECMAScript 6 een nieuwe functie aanmaakt om te controleren of een waarde NaNis. Verwarrend genoeg wordt deze functie ook isNaN genoemd, hoewel het aan het Number object is gekoppeld in plaats van direct aan het globale object., Het kan als volgt gebruikt worden:

uitstekend! We hebben een methode die echt werkt. Helaas is Number.isNaN alleen beschikbaar in nieuwere versies van FireFox en Chrome, en is ” t nog niet ondersteund in IE of andere belangrijke browsers. Dit kan in de toekomst een haalbare aanpak zijn, maar op dit moment kan het alleen in zeer beperkte omstandigheden worden gebruikt.

misschien kunnen we NaN“s type in plaats daarvan controleren?

Ja, dat leest u goed., In JavaScript is de waarde NaN van het type number. Dat zal niet erg helpen.

dus wat kunnen we doen om iets te krijgen dat correct werkt, maar ook beschikbaar is in cross-browser? Weet je nog dat ik zei dat NaN de enige waarde in JavaScript is die niet gelijk is aan zichzelf? Daar kunnen we gebruik van maken.

momenteel is de beste manier om te controleren of een waarde NaN is om te controleren of deze niet gelijk is aan zichzelf. Als dat zo is, dan weet je dat het NaNis.,

natuurlijk is het gebruik van deze techniek niet bijzonder leesbaar, dus is het gebruikelijk om het op te nemen in een utility methode die de intentie duidelijker communiceert. Zowel Underscore als Lo-Dash bieden implementaties.

Ik hoop dat dit u heeft geholpen een beter begrip te krijgen van de eigenaardigheden van NaN.

Bedankt voor het lezen!

Josh Clanton

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *