Jak zkontrolovat NaN v JavaScriptu

Kontrola NaN („není číslo“) je stejně jednoduchá jako kontrola vlastní rovnosti v JavaScriptu.

Dr. Derek Austin 🥳

Sledovat

15. září 2019 · 4 minuty čtení

Foto Rattap na Unsplash

V JavaScriptu se speciální hodnota NaN (což znamená“ ne číslo „) používá k vyjádření výsledku matematického výpočtu, který nelze vyjádřit jako smysluplné číslo. – Joshua Clanton on A Drip of JavaScript

Speciální hodnota NaN se zobrazí v JavaScriptu, když Math funkce selžou (Math.sqrt(-37)) nebo selže funkce, která se pokouší analyzovat číslo (parseInt("No integers here")).

NaN poté otráví všechny ostatní matematické funkce, což povede ke všem ostatním matematickým operacím, jejichž výsledkem bude NaN.

Foto Chris Barbalis na Unsplash

Upozorňujeme, že v JavaScriptu vrátí dělení 0 Infinity, ne NaN:

Tento výsledek je způsoben tím, jak plovoucí poi nt je definováno obecněji než jen Javascript. Proč? Zhruba proto, že 1/0 je limit 1 / x, protože x se blíží nule. A 0/0 nemá vůbec žádný rozumný výklad, proto NaN.

Co je vlastně NaN?

NaN je vlastnost globálního objektu. Počáteční hodnota NaN je Not-A-Number – stejná jako hodnota Number.NaN. – MDN Docs

Foto Andrew Buchanan na Unsplash

Kontrola NaN je těžší, než se zdá

Bohužel při pokusu o kontrolu :

  1. typeof NaN je“ číslo „
  2. NaN se nerovná všem ostatním hodnotám v JavaScriptu

Podívejte se na tento příklad kódu:

Jak tedy zkontrolujeme, zda máme NaN hodnotu, která otráví matematiku?

Foto Wolfganga Rottmanna na Unsplash

Zkontrolovat NaN pomocí sebe-rovnosti

“ NaN a pouze NaN bude srovnávat nerovné. “ – Dokumenty MDN

V JavaScriptu je nejlepším způsobem kontroly NaN kontrola rovnosti pomocí některého z předdefinovaných operátorů rovnosti == nebo ===.

Protože se nerovná sám sobě, NaN != NaN vždy vrátí true.

Samozřejmě, takový NaN test ve vašem kódu není vždy čitelný, takže je dobré použít komentář nebo vytvořit funkci wrapper:

Pokud použijete nebo !== ke kontrole NaN.

Foto Erik Mclean na Unsplash

Zkontrolovat NaN pomocí Object.is ()

“ The Object.is() určuje, zda jsou dvě hodnoty stejné hodnoty.”- MDN Docs

Na rozdíl od operátorů přísné a volné rovnosti pomocná metoda ES6 Object.is() nezohledňuje NaN aby se mu rovnal:

Takže pokud vyměníte === za Object.is(), nikdy se nemusíte bát o kontrole NaN nějakým zvláštním způsobem. Problém vyřešen!

O tom, jak používat Object.is() v JavaScriptu, jsem psal v jiném článku:

Jedna poznámka k terminologii – Object.is() je funkce globální Object třídy, nenazývám ji „operátorem rovnosti“ jako == nebo ===.

Například v testech Jest metoda .toBe(), která používá === se liší od metody .toEqual(), která používá Object.is().

Sbalit zde bych měl zmínit, že JavaScript ES6 Set, který se používá k hledání jedinečných hodnot, si ponechá pouze jednu kopii NaN hodnota.

Foto Tony Hand on Unsplash

Slovo o čísle .isNan ()

Moderní JavaScript již má implementaci pro kontrolu NaN s názvem Number.isNan(), která funguje tak, jak si myslíte to by. Například:

Pamatujte, že Number.isNan() se liší od globální isNan() funkce, což je starší implementace, jejímž skutečným účelem je zkontrolovat, zda hodnotu nelze vynutit na číslo.

Pro úplnost je zde rozdíl:

  • isNaN() vrátí true pokud je hodnota aktuálně NaN, nebo pokud bude NaN poté, co bude vynucována na číslo. Jinými slovy, pokud obdrží hodnotu, kterou lze vynutit na číslo, vrátí isNaN () hodnotu false.
  • Number.isNaN() vrátí true pouze v případě, že hodnota je aktuálně NaN.

Pokud tedy podporujete staré prohlížeče (zejména Internet Explorer), které nepodporují Number.isNan(), pak je nejlepší zkontrolovat sebe-rovnost.

Foto Nick Hillier na Unsplash

Leave a Reply

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *