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 NaN
ist“ number „ -
NaN
ist 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()
gibttrue
wenn der Wert derzeitNaN
ist oder wenn erNaN
sein 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 derzeitNaN
ist.
Wenn Sie also alte Browser (insbesondere Internet Explorer) unterstützen, die , dann ist es am besten, die Selbstgleichheit zu überprüfen.