So suchen Sie in JavaScript nach NaN

Das Überprüfen auf NaN („keine Zahl“) ist so einfach wie das Überprüfen der Selbstgleichheit in JavaScript.

Dr. Derek Austin 🥳

Folgen Sie

15. September 2019 · 4 Minuten lesen

Foto von Rattap on Unsplash

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.

Foto von Chris Barbalis auf Unsplash

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

Foto von Andrew Buchanan auf Unsplash

Die Suche nach NaN ist schwieriger als es scheint

Leider gibt es zwei Probleme bei der Suche nach NaN:

  1. Die typeof NaN ist“ number „
  2. 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?

Foto von Wolfgang Rottmann auf Unsplash

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.

Foto von Erik Mclean auf Unsplash

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.

Foto von Tony Hand auf Unsplash

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() gibt true wenn der Wert derzeit NaN ist oder wenn er NaN 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 derzeit NaN ist.

Wenn Sie also alte Browser (insbesondere Internet Explorer) unterstützen, die , dann ist es am besten, die Selbstgleichheit zu überprüfen.

Foto von Nick Hillier am Deaktivieren Sie

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.