problemet med test for NaN i JavaScript

oprindeligt offentliggjort i et drop af JavaScript nyhedsbrev.

i JavaScript bruges den specielle værdi NaN (betyder “ikke et tal”) til at repræsentere resultatet af en matematisk beregning, der ikke kan repræsenteres som et meningsfuldt tal., For eksempel:

Du er også sandsynligt løbe ind i NaN ved brug af parseInt eller parseFloat for at hente et nummer fra en streng, som i dette eksempel:

Som et resultat, JavaScript udviklere ofte har brug for at teste et resultat variabel for at se, om det indeholder NaN, eller om det er en meningsfuld værdi i stedet. Der er flere forskellige måder at kontrollere, om en værdi er NaN, men desværre er de fleste af dem upålidelige., Lad ” s gå gennem nogle af dem og se, hvordan de mislykkes.

den logiske ting at gøre er at kontrollere, om resultatet er lig med NaN.

Hvad foregår der her? I JavaScript har NaN sondringen om at være den eneste værdi, der ikke er lig med sig selv. Det betyder, at vi ikke kan finde ud af, om en værdi er NaN ved at kontrollere ligestilling til NaN fordi svaret altid vil være nej.

Hvad kunne vi ellers prøve? Hvad med den indbyggede isNaN funktion?,

Awesome! Denne ser ud til at virke. Og faktisk virker det under visse omstændigheder. På trods af navnet er formålet med isNaN funktionen”t for at kontrollere, om en værdi er NaN. I stedet er formålet at kontrollere, om en værdi ikke kan tvinges til et tal. På grund af dette kan det returnere falske positiver., Overvej følgende:

Medmindre du er sikker på, at du vil være der beskæftiger sig kun med tal eller NaN isNaN funktion er”t helt passer til dette formål.

det viser sig imidlertid, at ECMAScript 6 opretter en ny funktion med det specifikke formål at kontrollere, om en værdi er NaN. Forvirrende kaldes denne funktion ogsåisNaN, selvom den er knyttet tilNumber objekt snarere end direkte til det globale objekt., Det kan bruges som dette:

fremragende! Vi ” har fået en metode, der virkelig virker. Desværre, Number.isNaN er kun tilgængelig i nyere versioner af Firefo.og Chrome, og isn”t endnu understøttes i IE eller andre større bro .sere. Dette kan være en levedygtig tilgang i fremtiden, men for lige nu kan den kun bruges under meget snævre omstændigheder.

måske kan vi tjekke NaN ” s type i stedet?

Ja, du læser det korrekt., I JavaScript er værdien NaN af typen number. Det ” s ikke kommer til at være meget nyttigt.

så hvad kan vi gøre for at få noget, der fungerer korrekt, men som også er tilgængeligt på tværs af bro ?seren? Husk, hvordan jeg nævnte, at NaN er den eneste værdi i JavaScript, der ikke er lig med sig selv? Det kan vi udnytte.

i øjeblikket er den bedste måde at kontrollere, om en værdi er NaN, at kontrollere, om den ikke er lig med sig selv. I så fald ved du, at det er NaN.,selvfølgelig er brugen af denne teknik ikke særlig læsbar, så det er almindeligt at pakke det op i en hjælpemetode, der kommunikerer hensigten mere tydeligt. Både understregning og Lo-Dash giver implementeringer.

Jeg håber, at dette har hjulpet dig med at få et bedre greb om quuirks af NaN.

tak for læsning!

Josh Clanton

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *