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