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 NaN
is. 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 NaN
is. 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 NaN
is.,
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