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 NaNon” numero ” -
NaNon 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()palauttaatruejos arvo on tällä hetkelläNaNtai jos se onNaNsen jälkeen kun se on pakotettu numeroon. Toisin sanoen, jos se saa arvon, joka voidaan pakottaa numerolle, isNaN () palauttaa arvon false. -
Number.isNaN()palauttaa arvontruevain, 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.