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
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
. >
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 NaN
a” szám “ -
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?
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 atrue
ha az érték jelenlegNaN
, vagy haNaN
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 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.