Das Überprüfen auf NaN („keine Zahl“) ist so einfach wie das Überprüfen der Selbstgleichheit in JavaScript.
In JavaScript wird der spezielle Wert
NaN(was“ keine Zahl „bedeutet) verwendet, um das Ergebnis einer mathematischen Berechnung darzustellen, die nicht als dargestellt werden kann eine aussagekräftige Zahl. – Joshua Clanton über einen Tropfen JavaScript
Der spezielle Wert NaN wird in JavaScript angezeigt, wenn Math Funktionen schlagen fehl (Math.sqrt(-37)) oder wenn eine Funktion, die versucht, eine Zahl zu analysieren, fehlschlägt (parseInt("No integers here")).
NaN vergiftet dann alle anderen mathematischen Funktionen, was zu allen anderen mathematischen Operationen führt, die zu NaN führen.
Beachten Sie, dass in JavaScript die Division durch 0 Infinity, nicht NaN:
Dieses Ergebnis ist darauf zurückzuführen, wie Floating-Poi nt ist allgemeiner als nur Javascript definiert. Warum? Ungefähr, weil 1/0 die Grenze von 1 / x ist, wenn x gegen Null geht. Und 0/0 hat überhaupt keine vernünftige Interpretation, daher NaN.
Was ist NaN überhaupt?
NaN ist eine Eigenschaft des globalen Objekts. Der Anfangswert von NaN ist Not-A-Number – der gleiche wie der Wert von Number.NaN. – MDN-Dokumente
Die Suche nach NaN ist schwieriger als es scheint
Leider gibt es zwei Probleme bei der Suche nach NaN:
- Die
typeof NaNist“ number „ -
NaNist ungleich jedem anderen Wert in JavaScript
Schauen Sie sich dieses Codebeispiel an:
Wie überprüfen wir also, ob wir einen NaN -Wert haben, der die Mathematik vergiftet?
Auf NaN mit Selbstgleichheit prüfen
“ NaN und nur NaN werden ungleich mit sich selbst verglichen. “ – MDN-Dokumente
In JavaScript können Sie am besten nach NaN suchen, indem Sie die Selbstgleichheit überprüfen Verwenden Sie einen der integrierten Gleichheitsoperatoren, == oder ===.
Weil NaN ist nicht gleich sich selbst, NaN != NaN gibt immer true zurück.
Natürlich Ein solcher NaN -Test in Ihrem Code ist nicht immer lesbar. Daher empfiehlt es sich, einen Kommentar zu verwenden oder eine Wrapper-Funktion zu erstellen:
Es macht keinen Unterschied, wenn Sie oder !==, um nach NaN zu suchen.
Mit Object.is ()
“ Die
Object.is()bestimmt, ob zwei Werte der gleiche Wert sind.”- MDN-Dokumente
Im Gegensatz zu den strengen und losen Gleichheitsoperatoren berücksichtigt die ES6-Hilfsmethode Object.is() dies nicht NaN um sich selbst gleich zu sein:
Wenn Sie also === gegen Object.is() austauschen, müssen Sie sich keine Sorgen machen Informationen zur Überprüfung auf NaN auf besondere Weise. Problem gelöst!
Ich habe in einem anderen Artikel darüber geschrieben, wie Object.is() in JavaScript verwendet wird:
Ein Hinweis zur Terminologie – Object.is() ist eine Funktion in der globalen Klasse Object. Ich nenne es keinen „Gleichheitsoperator“ wie == oder ===.
In Scherztests wird beispielsweise die Methode .toBe() verwendet, die === unterscheidet sich von der Methode .toEqual(), die Object.is() verwendet.
Zum Abschluss Hier sollte ich erwähnen, dass ein JavaScript ES6 Set, das zum Suchen eindeutiger Werte verwendet wird, immer nur eine Kopie eines NaN aufbewahrt Wert.
Ein Wort zur Zahl .isNan ()
Modernes JavaScript verfügt bereits über eine Implementierung, mit der nach NaN mit dem Namen Number.isNan() gesucht werden kann es würde. Zum Beispiel:
Beachten Sie dies Number.isNan() unterscheidet sich von der globalen Funktion isNan(), bei der es sich um eine ältere Implementierung handelt, deren eigentlicher Zweck darin besteht, zu überprüfen, ob ein Wert nicht zu a gezwungen werden kann Nummer.
Der Vollständigkeit halber ist hier der Unterschied:
-
isNaN()gibttruewenn der Wert derzeitNaNist oder wenn erNaNsein wird, nachdem er zu einer Zahl gezwungen wurde. Mit anderen Worten, wenn es einen Wert empfängt, der zu einer Zahl gezwungen werden kann, gibt isNaN () false zurück. -
Number.isNaN()gibt nur wenn der Wert derzeitNaNist.
Wenn Sie also alte Browser (insbesondere Internet Explorer) unterstützen, die , dann ist es am besten, die Selbstgleichheit zu überprüfen.