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 NaN
ist.
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 NaN
besser zu verstehen.
Danke fürs Lesen!
Josh Clanton