A NaN ellenőrzése a JavaScript-ben

A NaN (“nem szám”) ellenőrzése ugyanolyan egyszerű, mint az önegyenlőség ellenőrzése a JavaScript-ben.

Dr. Derek Austin 🥳

Követés

2019. szeptember 15. · 4 perc olvasás

Fotó: Rattap az Unsplash-on

A JavaScript-ben a NaN speciális értéket (vagyis” nem számot “) kell használni egy matematikai számítás eredményének képviseletére, amely nem ábrázolható értelmes szám. – Joshua Clanton egy cseppet JavaScript-en

A NaN speciális érték megjelenik a JavaScript-ben, amikor Math funkciók meghibásodnak (Math.sqrt(-37)), vagy ha egy szám elemzésére próbáló függvény nem sikerül (parseInt("No integers here")).

NaN majd megmérgezi az összes többi matematikai függvényt, ami az összes többi matematikai művelethez vezet, ami NaN. >

Fotó: Chris Barbalis az Unsplash-on

Ne feledje, hogy a JavaScriptben a 0-val való felosztás Infinity, nem NaN:

Ez az eredmény a lebegő poi nt meg van határozva, általánosabban, mint pusztán a Javascript. Miért? Nagyjából azért, mert az 1/0 az 1 / x határértéke, amikor x megközelíti a nullát. A 0/0-nak pedig egyáltalán nincs értelmezhető értelmezése, ezért NaN.

Mi is az a NaN?

A NaN a globális objektum tulajdonsága. A NaN kezdeti értéke Not-A-Number – megegyezik a Number.NaN értékével. – MDN-dokumentumok

Fotó: Andrew Buchanan a Unsplash

A NaN ellenőrzése nehezebb, mint amilyennek látszik

Sajnos két probléma van a :

  1. A typeof NaN a” szám “
  2. NaN egyenlőtlen a többi értékkel a JavaScript-ben.

Nézze meg ezt a példát:

Tehát hogyan ellenőrizhetjük, hogy van-e NaN értéke, amely mérgezi a matematikát?

Fotó: Wolfgang Rottmann az Unsplash-on

Ellenőrizze a NaN-t az önegyenlőséggel

” A NaN, és csak a NaN összehasonlítja az egyenlőtlenségeket önmagával. ” – MDN-dokumentumok

A JavaScript-ben az NaN ellenőrzésének legjobb módja az önegyenlőség ellenőrzése. a beépített egyenlőségi operátorok egyikével, == vagy ===.

Mivel NaN nem egyenlő önmagával, a NaN != NaN mindig visszatér true.

Természetesen, egy ilyen NaN teszt a kódodban nem mindig olvasható, ezért érdemes megjegyzést használni vagy burkoló funkciót létrehozni:

Nincs különbség, ha a következőt használja: != vagy !== a NaN kereséséhez.

Fotó: Erik Mclean az Unsplash-on

A NaN ellenőrzése az Object.is ()

” A Object.is() módszer meghatározza, hogy két érték azonos-e.”- MDN dokumentumok

A szigorú és laza egyenlőség operátorokkal ellentétben az ES6 helper módszer Object.is() nem veszi figyelembe NaN egyenlő legyen önmagával:

Tehát, ha === -et kicseréli Object.is() -re, soha nem kell aggódnia a NaN bármilyen speciális módon történő ellenőrzéséről. A probléma megoldódott!

Egy másik cikkben arról írtam, hogy miként lehet használni az Object.is() szót a JavaScript-ben:

Egy megjegyzés a terminológiáról – Object.is() a globális Object osztály függvénye, nem nevezem “egyenlőség operátornak”, például == vagy ===.

Például a Jest tesztekben a .toBe() módszer használ === eltér a .toEqual() metódustól, amely a Object.is() -t használja.

Összefoglalás itt meg kell említenem, hogy az egyedi értékek keresésére használt JavaScript ES6 Set csak egy példányt fog megőrizni a NaN érték.

Fotó: Tony Hand az Unsplash-on

Egy szó a Számról .isNan ()

A modern JavaScript már rendelkezik olyan megvalósítással, amely ellenőrzi a NaN Number.isNan() nevet, amely szerinted működik lenne. Például:

Ne feledje, hogy A Number.isNan() különbözik a globális isNan() függvénytől, amely egy régebbi megvalósítás, amelynek tényleges célja annak ellenőrzése, hogy egy értéket nem lehet-e kikényszeríteni egy szám.

Itt van a különbség a teljesség kedvéért:

  • isNaN() visszaadja a true ha az érték jelenleg NaN, vagy ha NaN lesz, miután egy számra kényszerítik. Más szavakkal, ha egy számra kényszeríthető értéket kap, akkor az isNaN () értéke hamis lesz.
  • Number.isNaN() true csak akkor, ha az érték jelenleg NaN.

Tehát, ha olyan régi böngészőket támogat (különösen az Internet Explorert), amelyek nem támogatják a Number.isNan(), akkor a legjobb, ha ellenőrizzük az önegyenlőséget.

Fotó: Nick Hillier on Unsplash

Leave a Reply

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük