Problemet med Testing for NaN i JavaScript

Opprinnelig publisert i Et Drypp av JavaScript nyhetsbrev.

I JavaScript, den spesielle verdien NaN (som betyr «ikke et tall») brukes til å representere resultatet av en matematisk beregning som ikke kan representeres som en meningsfull antall., For eksempel:

Du er også sannsynlig kjøre inn NaN når du bruker parseInt eller parseFloat for å trekke ut et nummer fra en streng, som i dette eksemplet:

Som et resultat, JavaScript-utviklere ofte behov for å teste et resultat variabel for å se om den inneholder NaN eller om det er en meningsfylt verdi i stedet. Det er flere forskjellige måter å sjekke om en verdi NaN, men dessverre, de fleste av dem er upålitelige., La s gjennomgå noen av dem og se hvordan de mislykkes.

Den logiske tingen å gjøre er å sjekke om resultatet er lik NaN.

Hva»s skjer her? I JavaScript, NaN har æren av å være den eneste verdi som ikke er lik seg selv. Det betyr at vi kan»t finne ut om verdien er NaN ved å sjekke likestilling til NaN fordi svaret vil alltid være noe.

Hva annet kan vi prøve? Hvordan om den innebygde isNaN funksjon?,

Awesome! Dette ser ut til å fungere. Og faktisk gjør det arbeidet under noen omstendigheter. Imidlertid, til tross for navnet, er formålet med isNaN funksjon er»t for å sjekke om en verdi er NaN. I stedet formålet er å kontrollere om verdien ikke kan tvinges til et tall. På grunn av dette, kan det gå tilbake falske positiver., Vurdere følgende:

med Mindre du er sikker på at du vil være med å gjøre bare med tall eller NaN, isNaN funksjon er»t ganske passe til dette formålet.

Imidlertid, det viser seg at ECMAScript 6 oppretter en ny funksjon for det spesifikke formål å kontrollere om verdien er NaN. Forvirrende, men denne funksjonen er også kalt isNaN, selv om den er koblet til Number objekt snarere enn direkte til det globale objektet., Den kan brukes slik:

Utmerket! Vi»ve got en metode som virkelig fungerer. Dessverre, Number.isNaN er bare tilgjengelige i nyere versjoner av FireFox og Chrome, og er»t ennå støttes i IE eller andre store nettleserne. Dette kan være en levedyktig tilnærming i fremtiden, men for nå kan den bare brukes i svært trange omstendigheter.

Kanskje vi kan se NaN«s-type i stedet?

Ja, du»re lesing som forståelse., I JavaScript, verdien NaN er av typen number. Det»er ikke kommer til å være svært nyttig.

Så hva kan vi gjøre for å få noe som fungerer på riktig måte, men er også tilgjengelig kryss-nettleser? Husker hvordan jeg nevnte at NaN er den eneste verdien i JavaScript som ikke er lik seg selv? Kan vi dra nytte av det faktum.

i Dag den beste måten å sjekke om et verdien er NaN er for å sjekke om den ikke er lik seg selv. Hvis så, da vet du at det er NaN.,

selvfølgelig, ved hjelp av denne teknikken er»t spesielt lesbart, så det er vanlig å pakke den opp i et verktøy metode som kommuniserer hensikten mer tydelig. Både Underbygger og Lo-Dash gi implementeringer.

jeg håper dette har hjulpet deg å få et bedre grep på quirks av NaN.

Takk for at du leser!

Josh Clanton

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *