Das Problem beim Testen auf NaN in JavaScript

Wurde ursprünglich im A Drip of JavaScript Newsletter veröffentlicht.

In JavaScript wird der spezielle Wert NaN (dh „keine Zahl“) verwendet, um das Ergebnis einer mathematischen Berechnung darzustellen, die nicht als aussagekräftige Zahl dargestellt werden kann., Beispiel:

Sie stoßen wahrscheinlich auch auf , wenn Sie parseInt oder parseFloat verwenden, um eine Zahl aus einer Zeichenfolge zu extrahieren, wie in diesem Beispiel:

Daher müssen JavaScript-Entwickler häufig eine Ergebnisvariable testen, um festzustellen, ob sie NaN enthält oder ob es sich stattdessen um einen aussagekräftigen Wert handelt. Es gibt verschiedene Möglichkeiten zu überprüfen, ob ein Wert NaN, aber leider sind die meisten von ihnen unzuverlässig., Lassen Sie uns durch einige von ihnen gehen und sehen, wie sie scheitern.

Logisch ist zu prüfen, ob das Ergebnis gleich NaNist.

Was“s Los hier? In JavaScript hat NaN den Unterschied, der einzige Wert zu sein, der sich selbst nicht entspricht. Das heißt, wir können nicht herausfinden, ob ein Wert NaN durch Gleichheit zu NaN überprüfen, weil die Antwort immer nein sein wird.

Was könnten wir noch versuchen? Wie wäre es mit der eingebauten isNaN Funktion?,

Awesome! Dieser scheint zu funktionieren. Und tatsächlich funktioniert es unter bestimmten Umständen. Trotz des Namens ist der Zweck der Funktion isNaN jedoch nicht zu überprüfen, ob ein Wert NaN. Stattdessen soll überprüft werden, ob ein Wert nicht zu einer Zahl gezwungen werden kann. Aus diesem Grund kann es falsch positive Ergebnisse zurückgeben., Betrachten Sie Folgendes:

Es sei denn, Sie sind sicher, dass Sie nur mit Zahlen oder zu tun haben, die isNaN Funktion ist nicht ganz fit für diesen Zweck.

Es stellt sich jedoch heraus, dass ECMAScript 6 eine neue Funktion erstellt, um zu überprüfen, ob ein Wert NaN. Verwirrend wird diese Funktion auch isNaN, obwohl sie eher an das Number – Objekt als direkt an das globale Objekt angehängt ist., Es kann z.B. so verwendet werden:

Ausgezeichnete! Wir haben eine Methode, die wirklich funktioniert. Leider Number.isNaN ist nur in neueren Versionen von FireFox und Chrome, und isn “ t noch in IE oder anderen gängigen Browsern unterstützt. Dies mag in Zukunft ein praktikabler Ansatz sein, aber im Moment kann er nur unter sehr engen Umständen verwendet werden.

Vielleicht können wir stattdessen NaN„s type?

ja, Sie“neu zu Lesen das richtig., In JavaScript ist der Wert NaN vom Typ number. Das wird nicht sehr hilfreich sein.

Was können wir also tun, um etwas zu erhalten, das korrekt funktioniert, aber auch browserübergreifend verfügbar ist? Denken Sie daran, wie ich erwähnt habe, dass NaN der einzige Wert in JavaScript ist, der sich selbst nicht entspricht. Wir können diese Tatsache ausnutzen.

Derzeit ist der beste Weg, um zu überprüfen, ob ein Wert NaN ist, um zu überprüfen, ob er nicht gleich sich selbst ist. Wenn ja, dann wissen Sie, dass es NaN.,

Natürlich ist die Verwendung dieser Technik nicht besonders lesbar, daher ist es üblich, sie in eine Utility-Methode zu packen, die die Absicht klarer kommuniziert. Sowohl Underscore als auch Lo-Dash bieten Implementierungen.

Ich hoffe, dies hat Ihnen geholfen, die Macken von NaNbesser zu verstehen.

Danke fürs Lesen!

Josh Clanton

Schreibe einen Kommentar

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