Cum să căutați NaN în JavaScript

Verificarea NaN („nu un număr”) este la fel de simplă ca verificarea egalității de sine în JavaScript.

Dr. Derek Austin 🥳

Follow

15 septembrie 2019 · 4 min de citire

Fotografie de Rattap pe Unsplash

În JavaScript, valoarea specială NaN (adică„ nu un număr ”) este utilizată pentru a reprezenta rezultatul unui calcul matematic care nu poate fi reprezentat ca un număr semnificativ. – Joshua Clanton pe A Drip of JavaScript

Valoarea specială NaN apare în JavaScript când Math funcțiile eșuează (Math.sqrt(-37)) sau când o funcție care încearcă să analizeze un număr eșuează (parseInt("No integers here")).

NaN apoi otrăvește toate celelalte funcții matematice, ducând la toate celelalte operații matematice rezultând NaN.

Fotografie de Chris Barbalis pe Unsplash

Rețineți că în JavaScript, împărțirea la 0 returnează Infinity, nu NaN:

Acest rezultat se datorează modului în care floating-poi nt este definit, mai general decât Javascript. De ce? Aproximativ, deoarece 1/0 este limita de 1 / x pe măsură ce x se apropie de zero. Și 0/0 nu are deloc o interpretare rezonabilă, prin urmare NaN.

Ce este oricum NaN?

NaN este o proprietate a obiectului global. Valoarea inițială a NaN este Not-A-Number – aceeași cu valoarea Number.NaN. – Documente MDN

Fotografie de Andrew Buchanan pe Unsplash

Verificarea NaN este mai dificilă decât pare

Din păcate, există două probleme la încercarea de a verifica NaN:

  1. typeof NaN este” număr „
  2. NaN este inegal cu orice altă valoare din JavaScript

Consultați acest exemplu de cod:

Deci, cum putem verifica dacă avem o valoare NaN care va otrăvi matematica?

Fotografie de Wolfgang Rottmann pe Unsplash

Verificați dacă există NaN cu egalitate de sine

” NaN și numai NaN se vor compara inegal cu el însuși. ” – Documente MDN

În JavaScript, cel mai bun mod de a verifica NaN este verificarea egalității de sine utilizând oricare dintre operatorii de egalitate încorporați, == sau ===.

Deoarece NaN nu este egal cu el însuși, NaN != NaN va reveni întotdeauna true.

Desigur, un astfel de NaN test în codul dvs. nu este întotdeauna lizibil, deci este o idee bună să utilizați un comentariu sau să creați o funcție de împachetare:

Nu face nicio diferență dacă utilizați != sau !== pentru a verifica dacă există NaN.

Fotografie de Erik Mclean pe Unsplash

Căutați NaN cu Object.is ()

Object.is() determină dacă două valori sunt aceeași valoare.”- MDN Docs

Spre deosebire de operatorii de egalitate stricți și slabi, metoda de ajutor ES6 Object.is() nu ia în considerare NaN să fie egal cu el însuși:

Deci, dacă schimbați === cu Object.is(), nu trebuie să vă faceți griji niciodată despre verificarea NaN în orice mod special. Problemă rezolvată!

Am scris despre cum să folosesc Object.is() în JavaScript într-un alt articol:

O notă despre terminologie – Object.is() este o funcție din clasa globală Object, nu o numesc „operator de egalitate” precum == sau ===.

De exemplu, în testele Jest, metoda .toBe() care utilizează este diferit de metoda .toEqual() care folosește Object.is().

Pentru a încheia aici, ar trebui să menționez că un JavaScript ES6 Set, care este utilizat pentru găsirea unor valori unice, va păstra o singură copie a unui NaN valoare.

Fotografie de Tony Hand pe Unsplash

Un cuvânt despre Number .isNan ()

JavaScript modern are deja o implementare pentru a verifica NaN numit Number.isNan() care funcționează cum credeți ar fi. De exemplu:

Rețineți că Number.isNan() este diferit de funcția globală isNan(), care este o implementare mai veche al cărei scop real este de a verifica dacă o valoare nu poate fi constrânsă la o număr.

Iată diferența, pentru completare:

  • isNaN() va returna true dacă valoarea este în prezent NaN sau dacă va fi NaN după ce va fi constrânsă la un număr. Cu alte cuvinte, dacă primește o valoare care poate fi constrânsă la un număr, isNaN () va returna false.
  • Number.isNaN() va returna true numai dacă valoarea este în prezent NaN.

Deci, dacă acceptați browsere vechi (în special Internet Explorer) care nu acceptă Number.isNan(), atunci cel mai bine este să verificați egalitatea de sine.

Fotografie de Nick Hillier pe Unsplash

Leave a Reply

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *