Forskjell mellom isNaN og Number.isNaN
Nesten alle vet hva `isNaN` er og hvordan man bruker det. Det betyr «er den tingen som ser ut som et tall, virkelig et tall eller ikke?» Det blir sant hvis det er gitt «Ikke et tall». Jeg antar at du har poenget. Ok, nå er det avtalen; hva er forskjellen mellom isNaN og Number.isNaN?
Før jeg begynner å forklare, vil jeg takke vennen min Rafael for at han oppfordret meg til å skrive.
La oss begynne med isNaN. Dette er en global funksjon du kan ringe fra hvor som helst. La oss se det i aksjon:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
Det er så enkelt, men det er noen feilvisninger. Her er eksemplene:
Som du kan se i henhold til isNaN-implementering, behandles strengverdien som tall og returnerer resultatet basert på dette .. Sjekk `isNaN (‘blabla’)`
Så for å løse de misforståelsene vi har Number.isNaN statisk metode kommer med EcmaScript 2015 # Number.isNaN
Hva gjør den?
I mitt tilfelle har jeg en metode som godtar to parametere som talltype og gjør litt animasjon på skalering av målet gjenstand. Etter en liten refactoring fikk jeg på en eller annen måte underlig oppførsel. Ja, jeg burde ha skrevet enhetstester, skam meg. Uansett, i noen tilfeller mottar metoden udefinert som parametere. Så jeg må sjekke dem.
Jeg skrev dette:
Min uforsiktighet fører meg til feil logikk. Fordi Number.isNaN (udefinert) vil gi meg falsk. (gammel isNaN (udefinert) returnerer sant) Så jeg endret meg slik:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Så det ser ut til å virke. Men jeg ønsket å bry meg om alle mulige feil. Kanskje jeg kan motta null i stedet for udefinert. Hvis jeg mottar null, mislykkes logikken min. Hvorfor?
null * null; // 0
null * 8 // 0
Jeg tror du ser saken. Så jeg oppdaterte koden slik:
Målet mitt var å sjekke to verdier mot å være udefinert eller null. Og reisen min ender med å skrive den artikkelen og oppdatere kunnskapen min. Implementeringen er ikke fancy, jeg vet, men reisen var lærerik.