NaN: n (”ei numero”) tarkistaminen on yhtä helppoa kuin itsesäätöisyyden tarkistaminen JavaScriptissa.
JavaScriptissä erityisarvoa
NaN
(eli” ei numero ”) käytetään kuvaamaan matemaattisen laskelman tulosta, jota ei voida esittää mielekäs luku. – Joshua Clanton tippuvassa JavaScriptissä
Erityisarvo NaN
näkyy Javascriptissa, kun Math
toiminnot epäonnistuvat (Math.sqrt(-37)
) tai kun numeron jäsentämistä yrittävä toiminto epäonnistuu (parseInt("No integers here")
).
NaN
myrkyttää sitten kaikki muut matematiikkatoiminnot, mikä johtaa kaikkiin muihin matematiikkatoimintoihin, jotka johtavat NaN
.
Huomaa, että JavaScriptissä jakaminen 0: lla palauttaa Infinity
, ei NaN
:
Tämä tulos johtuu siitä, kuinka kelluva poi nt on määritelty yleisemmin kuin vain Javascript. Miksi? Karkeasti, koska 1/0 on 1 / x: n raja, kun x lähestyy nollaa. Ja 0/0: lla ei ole lainkaan järkevää tulkintaa, joten NaN
.
Mikä NaN silti on?
NaN on globaalin objektin ominaisuus. NaN: n alkuarvo on Not-A-luku – sama kuin Number.NaN: n arvo. – MDN-dokumentit
NaN: n tarkistus on vaikeampi kuin miltä näyttää
Valitettavasti :
-
typeof NaN
on” numero ” -
NaN
on epätasainen kaikkien muiden JavaScript-arvojen kanssa.
Katso tämä esimerkki koodista:
Kuinka siis tarkistamme, onko meillä NaN
-arvo, joka myrkyttää matematiikan?
Tarkista NaN itsetasauksella
” NaN, ja vain NaN, vertaa eriarvoisuutta itseensä. ” – MDN-dokumentit
Javascriptissa paras tapa tarkistaa NaN
on tarkistaa itsesi tasa-arvo käyttämällä joko sisäänrakennettuja tasa-arvooperaattoreita, ==
tai ===
.
Koska NaN
ei ole sama kuin itsensä, NaN != NaN
palauttaa aina true
.
Tietenkin, tällainen koodissasi oleva NaN
-testi ei ole aina luettavissa, joten kannattaa käyttää kommenttia tai luoda kääritystoiminto:
Sillä ei ole merkitystä, jos käytät !=
tai !==
tarkistaaksesi, onko NaN
.
Tarkista NaN Object.is ()
”
Object.is()
-menetelmä määrittää, ovatko kaksi arvoa sama arvo.”- MDN-dokumentit
Toisin kuin tiukat ja löysät tasa-arvooperaattorit, ES6-apumenetelmä Object.is()
ei ota huomioon NaN
olemaan sama kuin itsensä:
Joten, jos vaihdat ===
kohtaan Object.is()
, sinun ei tarvitse koskaan huolehtia NaN
-tietojen tarkistamisesta jollakin erityisellä tavalla. Ongelma ratkaistu!
Kirjoitin Object.is()
-sovelluksen käytöstä JavaScriptissä toisessa artikkelissa:
Yksi huomautus termeistä – Object.is()
on globaalin Object
luokan funktio, en kutsu sitä ”tasa-arvooperaattoriksi”, kuten ==
tai ===
.
Esimerkiksi Jest-testeissä menetelmä .toBe()
, joka käyttää ===
eroaa menetelmästä .toEqual()
, joka käyttää Object.is()
.
Päättely Tässä on syytä mainita, että JavaScript ES6 Set
, jota käytetään yksilöllisten arvojen löytämiseen, säilyttää vain yhden kopion NaN
arvo.
Sana numerosta .isNan ()
Nykyaikaisella JavaScriptiä on jo toteutettu tarkistaaksesi NaN
nimeltään Number.isNan()
, mikä toimii mielestäsi se olisi. Esimerkki:
Huomaa, että Number.isNan()
eroaa globaalista isNan()
-funktiosta, joka on vanhempi toteutus, jonka varsinainen tarkoitus on tarkistaa, ettei arvoa voida pakottaa numero.
Tässä on täydellisyyden ero:
-
isNaN()
palauttaatrue
jos arvo on tällä hetkelläNaN
tai jos se onNaN
sen jälkeen kun se on pakotettu numeroon. Toisin sanoen, jos se saa arvon, joka voidaan pakottaa numerolle, isNaN () palauttaa arvon false. -
Number.isNaN()
palauttaa arvontrue
vain, jos arvo on tällä hetkelläNaN
.
Joten jos tuet vanhoja selaimia (etenkin Internet Exploreria), jotka eivät tue Number.isNan()
, silloin on parasta tarkistaa itsesi tasa-arvo.