ursprungligen publicerad i ett dropp av JavaScript nyhetsbrev.
i JavaScript används det speciella värdet NaN
(vilket betyder ”inte ett tal”) för att representera resultatet av en matematisk beräkning som inte kan representeras som ett meningsfullt tal., Till exempel:
det är också troligt att du stöter på NaN
när du använder parseInt
eller parseFloat
för att extrahera ett nummer från en sträng, som i det här exemplet:
som ett resultat måste JavaScript-utvecklare ofta testa en resultatvariabel för att se om den innehåller NaN
eller om det är ett meningsfullt värde istället. Det finns flera olika sätt att kontrollera om ett värde är NaN
, men tyvärr är de flesta opålitliga., Låt oss gå igenom några av dem och se hur de misslyckas.
det logiska är att kontrollera om resultatet är lika medNaN
.
vad händer här? I JavaScript har NaN
skillnaden att vara det enda värdet som inte är lika med sig själv. Det betyder att vi inte kan ta reda på om ett värde är NaN
genom att kontrollera jämlikhet med NaN
eftersom svaret alltid kommer att vara nej.
vad mer kan vi försöka? Vad sägs om den inbyggda funktionen isNaN
?,
Häftigt! Den här verkar fungera. Och i själva verket fungerar det under vissa omständigheter. Trots namnet är syftet med funktionenisNaN
inte att kontrollera om ett värde ärNaN
. I stället är syftet att kontrollera om ett värde inte kan tvingas till ett tal. På grund av detta kan det returnera falska positiva., Tänk på följande:
Om du inte är säker på att du bara kommer att hantera siffror ellerNaN
, är funktionenisNaN
inte lämplig för detta ändamål.
det visar sig dock att ECMAScript 6 skapar en ny funktion för det specifika syftet att kontrollera om ett värde är NaN
. Förvirrande kallas denna funktion också isNaN
, även om den är kopplad till Number
– objektet snarare än direkt till det globala objektet., Den kan användas så här:
utmärkt! Vi har en metod som verkligen fungerar. Tyvärr är Number.isNaN
endast tillgänglig i nyare versioner av FireFox och Chrome, och stöds ännu inte i IE eller andra större webbläsare. Detta kan vara en livskraftig strategi i framtiden, men för just nu kan den bara användas under mycket smala omständigheter.
vi kanske kan kontrolleraNaN
”s typ istället?
Ja, du läser det korrekt., I JavaScript är värdet NaN
av typen number
. Det kommer inte att vara till stor hjälp.
Så vad kan vi göra för att få något som fungerar korrekt, men är också tillgängligt över webbläsare? Kom ihåg hur jag nämnde attNaN
är det enda värdet i JavaScript som inte är lika med sig själv? Vi kan utnyttja detta faktum.
För närvarande är det bästa sättet att kontrollera om ett värde ärNaN
att kontrollera om det inte är lika med sig själv. Om så är fallet vet du att det är NaN
.,
naturligtvis är det inte särskilt läsbart att använda denna teknik, så det är vanligt att sätta upp det i en användbarhetsmetod som kommunicerar avsikten tydligare. Både understreck och Lo-Dash ger implementeringar.
Jag hoppas att detta har hjälpt dig att få ett bättre grepp om egenskaperna hos NaN
.
Tack för att du läste!
Josh Clanton