Skillnad mellan isNaN och Number.isNaN
Nästan alla vet vad `isNaN` är och hur man använder det. Det betyder ”är den saken som ser ut som ett nummer, verkligen ett nummer eller inte?” Det returnerar sant om det ges ”Inte ett nummer”. Jag antar att du har poängen. Ok, nu är det här affären; vad är skillnaden mellan isNaN och Number.isNaN?
Innan jag börjar förklara vill jag tacka min vän Rafael för att han uppmuntrade mig att skriva.
Låt oss börja med isNaN. Det här är en global funktion som du kan ringa från var som helst. Låt oss se det i aktion:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
Det är så enkelt men det finns några felriktningar. Här är exemplen:
Som du kan se enligt isNaN-implementering behandlar strängvärdet som nummer och returnerar resultatet baserat på detta .. Markera `isNaN (’blabla’)`
Så för att lösa de missuppfattningar vi har Number.isNaN statisk metod kommer med EcmaScript 2015 # Number.isNaN
Vad gör det?
I mitt fall har jag en metod som accepterar två parametrar som nummertyp och gör lite animering vid skalning av mål objekt. På något sätt efter att ha gjort lite refactoring fick jag konstigt beteende. Ja, jag borde ha skrivit enhetstester, skäm mig. Hur som helst, i vissa fall får metoden odefinierad som parametrar. Så jag måste kontrollera dem.
Jag skrev det här:
Min slarv leder mig till fel logik. Eftersom Number.isNaN (odefinierad) kommer att returnera mig falsk. (gammal isNaN (undefined) returnerar true) Så jag ändrade så här:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Så det verkar fungera. Men jag ville ta hand om alla tänkbara misslyckanden. Jag kanske får null istället för odefinierad. Om jag får null kommer min logik att misslyckas. Varför?
null * null; // 0
null * 8 // 0
Jag tror att du ser saken. Så jag uppdaterade koden så här:
Mitt mål var att kontrollera två värden mot att vara odefinierad eller null. Och min resa slutar skriva den artikeln och uppdatera mina kunskaper. Implementeringen är inte snygg jag vet men resan var lärorik.