problemet med testning för NaN i JavaScript

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *