Controleren op NaN in JavaScript

Controleren op NaN (“geen getal”) is net zo eenvoudig als controleren op zelfgelijkheid in JavaScript.

Dr. Derek Austin 🥳

Volgen

15 september 2019 · 4 min gelezen

Foto door Rattap op Unsplash

In JavaScript wordt de speciale waarde NaN (wat” geen getal “betekent) gebruikt om het resultaat weer te geven van een wiskundige berekening die niet kan worden weergegeven als een betekenisvol nummer. – Joshua Clanton over A Drip of JavaScript

De speciale waarde NaN verschijnt in JavaScript wanneer Math functies mislukken (Math.sqrt(-37)) of wanneer een functie die probeert een nummer te parseren mislukt (parseInt("No integers here")).

NaN vergiftigt vervolgens alle andere wiskundige functies, wat leidt tot alle andere wiskundige bewerkingen resulterend in NaN.

Foto door Chris Barbalis op Unsplash

Merk op dat in JavaScript, delen door 0 retourneert Infinity, niet NaN:

Dit resultaat is vanwege hoe zwevende poi nt is gedefinieerd, meer in het algemeen dan alleen Javascript. Waarom? Ongeveer omdat 1/0 de limiet is van 1 / x als x nul nadert. En 0/0 heeft helemaal geen redelijke interpretatie, vandaar NaN.

Wat is NaN eigenlijk?

NaN is een eigenschap van het globale object. De beginwaarde van NaN is Not-A-Number – hetzelfde als de waarde van Number.NaN. – MDN Docs

Foto door Andrew Buchanan op Unsplash

Controleren op NaN is moeilijker dan het lijkt

Helaas zijn er twee problemen bij het zoeken naar NaN:

  1. De typeof NaN is” nummer “
  2. NaN is ongelijk aan elke andere waarde in JavaScript

Bekijk dit codevoorbeeld:

Dus hoe controleren we of we een NaN waarde hebben die wiskunde vergiftigt?

Foto door Wolfgang Rottmann op Unsplash

Controleer op NaN met zelfgelijkheid

” NaN, en alleen NaN, zal ongelijk aan zichzelf vergelijken. ” – MDN Docs

In JavaScript is de beste manier om te controleren op NaN door te controleren op zelfgelijkheid met behulp van een van de ingebouwde gelijkheidsoperatoren, == of ===.

Omdat NaN is niet gelijk aan zichzelf, NaN != NaN retourneert altijd true.

Natuurlijk, zo’n NaN test in je code is niet altijd leesbaar, dus het is een goed idee om een opmerking te gebruiken of een wrapper-functie te maken:

Het maakt niet uit of je != of !== om te controleren op NaN.

Foto door Erik Mclean op Unsplash

Controleer op NaN met Object.is ()

” De Object.is() methode bepaalt of twee waarden dezelfde waarde hebben.”- MDN Docs

In tegenstelling tot de strikte en losse gelijkheidsoperatoren, houdt de ES6-helper-methode Object.is() geen rekening met NaN gelijk zijn aan zichzelf:

Dus als u === vervangt door Object.is(), hoeft u zich geen zorgen te maken over het controleren op NaN op een speciale manier. Probleem opgelost!

Ik schreef over het gebruik van Object.is() in JavaScript in een ander artikel:

Een opmerking over terminologie – Object.is() is een functie van de globale Object klasse, ik noem het geen “gelijkheidsoperator” zoals == of ===.

Bijvoorbeeld, in Jest-tests, de methode .toBe() die === verschilt van de methode .toEqual() die Object.is() gebruikt.

Om af te ronden hier moet ik vermelden dat een JavaScript ES6 Set, die wordt gebruikt om unieke waarden te vinden, slechts één kopie van een NaN waarde.

Foto door Tony Hand op Unsplash

Een woord over Getal .isNan ()

Modern JavaScript heeft al een implementatie om te controleren op NaN genaamd Number.isNan() die werkt zoals jij denkt het zou. Bijvoorbeeld:

Merk op dat Number.isNan() verschilt van de globale isNan() -functie, een oudere implementatie waarvan het werkelijke doel is om te controleren of een waarde niet kan worden afgedwongen tot een nummer.

Hier is het verschil, voor de volledigheid:

  • isNaN() retourneert true als de waarde momenteel NaN is, of als het NaN wordt nadat het naar een getal is gedwongen. Met andere woorden, als het een waarde ontvangt die kan worden afgedwongen tot een getal, retourneert isNaN () false.
  • Number.isNaN() retourneert true alleen als de waarde momenteel NaN is.

Dus als u oude browsers ondersteunt (vooral Internet Explorer) die , dan is het het beste om te controleren op zelfgelijkheid.

Foto door Nick Hillier op Unsplash

Leave a Reply

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *