Unterschied zwischen isNaN und Number.isNaN
Fast jeder weiß, was „isNaN“ ist und wie man es benutzt. Es bedeutet „sieht das Ding wie eine Zahl aus, wirklich eine Zahl oder nicht?“ Es gibt true zurück, wenn „Not a Number“ angegeben ist. Ich nehme an, Sie haben den Punkt verstanden. Ok, jetzt ist hier der Deal; Was ist der Unterschied zwischen isNaN und Number.isNaN?
Bevor ich mit der Erklärung beginne, möchte ich meinem Freund Rafael dafür danken, dass er mich zum Schreiben ermutigt hat.
Beginnen wir mit isNaN. Dies ist eine globale Funktion, die Sie von überall aus aufrufen können. Lassen Sie es uns in Aktion sehen:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
So einfach ist das, aber es gibt einige Fehlleitungen. Hier die Beispiele:
Wie Sie gemäß der isNaN-Implementierung sehen können, wird der Zeichenfolgenwert als Zahl behandelt und das darauf basierende Ergebnis zurückgegeben. Überprüfen Sie `isNaN (‚blabla‘)`
Um diese Missverständnisse zu lösen, die wir haben Die statische Methode Number.isNaN wird mit EcmaScript 2015 geliefert. # Number.isNaN
Was macht sie?
In meinem Fall habe ich eine Methode, die zwei Parameter als Zahlentyp akzeptiert und einige Animationen zur Skalierung des Ziels ausführt Objekt. Irgendwie bekam ich nach einigem Refactoring ein seltsames Verhalten. Ja, ich hätte Unit-Tests schreiben sollen, schade um mich. In einigen Fällen erhält die Methode jedoch undefinierte Parameter. Also muss ich sie überprüfen.
Ich habe Folgendes geschrieben:
Meine Nachlässigkeit führt mich zu einer falschen Logik. Weil Number.isNaN (undefiniert) mir false zurückgibt. (old isNaN (undefined) gibt true zurück) Also habe ich mich folgendermaßen geändert:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Es scheint also zu funktionieren. Aber ich wollte mich um jeden möglichen Fehler kümmern. Vielleicht erhalte ich null statt undefiniert. Wenn ich null erhalte, schlägt meine Logik fehl. Warum?
null * null; // 0
null * 8 // 0
Ich denke, Sie sehen das Ding. Also habe ich den Code folgendermaßen aktualisiert:
Mein Ziel war es, zwei Werte gegen undefiniert oder null zu prüfen. Und meine Reise endet damit, diesen Artikel zu schreiben und mein Wissen zu aktualisieren. Ich weiß, dass die Implementierung nicht besonders gut ist, aber die Reise war lehrreich.