Forskel mellem isNaN og Number.isNaN
Næsten alle ved, hvad `isNaN` er, og hvordan man bruger det. Det betyder “er den ting, der ligner et tal, virkelig et tal eller ej?” Det returnerer sandt, hvis det er “Ikke et tal”. Jeg antager, at du har pointen. Ok, her er handlen her; hvad er forskellen mellem isNaN og Number.isNaN?
Før jeg begynder at forklare, vil jeg takke min ven Rafael for at have opmuntret mig til at skrive.
Lad os starte med isNaN. Dette er en global funktion, du kan ringe fra overalt. Lad os se det i aktion:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
Det er så simpelt, men der er nogle misvisninger. Her er eksemplerne:
Som du kan se i henhold til isNaN-implementering behandles strengværdien som nummer og returnerer resultatet baseret på dette .. Marker `isNaN (‘blabla’)`
Så for at løse de misforståelser, vi har Number.isNaN statisk metode kommer med EcmaScript 2015 # Number.isNaN
Hvad laver det?
I mit tilfælde har jeg en metode, der accepterer to parametre som nummertype og foretager animation ved skalering af målet objekt. Efter en lille refactoring fik jeg på en eller anden måde underlig opførsel. Ja, jeg skulle have skrevet enhedstest, skam mig. Under alle omstændigheder modtager metoden i nogle tilfælde udefineret som parametre. Så jeg er nødt til at kontrollere dem.
Jeg skrev dette:
Min skødesløshed fører mig til forkert logik. Fordi Number.isNaN (udefineret) returnerer mig falsk. (gammel isNaN (udefineret) returnerer sandt) Så jeg ændrede mig sådan:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Så det ser ud til at virke. Men jeg ville pleje enhver mulig fiasko. Måske modtager jeg muligvis null i stedet for udefineret. Hvis jeg modtager null, mislykkes min logik. Hvorfor?
null * null; // 0
null * 8 // 0
Jeg tror, du ser det. Så jeg opdaterede koden sådan:
Mit mål var at kontrollere to værdier for at være udefineret eller null. Og min rejse ender med at skrive den artikel og opdatere min viden. Implementeringen er ikke fancy, jeg ved, men rejsen var lærerig.