A NaN (“nem szám”) ellenőrzése ugyanolyan egyszerű, mint az önegyenlőség ellenőrzése a JavaScript-ben.
A JavaScript-ben a
NaNspeciá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. >
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
A NaN ellenőrzése nehezebb, mint amilyennek látszik
Sajnos két probléma van a :
- A
typeof NaNa” szám “ -
NaNegyenlő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?
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.
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.
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 atrueha az érték jelenlegNaN, vagy haNaNlesz, 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()truecsak akkor, ha az érték jelenlegNaN.
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.