Wie man in JavaScript auf eine Zahl prüft

Zahlen sind ein primitiver Typ in JavaScript, aber nur mit typeof lassen sich Zahlen nicht von NaN oder Infinity unterscheiden.

Sep 23, 2019 – 6 min read

Foto von Alex Chambers auf Unsplash

Es ist nützlich zu wissen, wie man überprüft, ob ein Wert vom primitiven Typ Zahl ist, da JavaScript eine dynamisch typisierte Sprache ist.

Der einfachste Weg, auf eine Zahl zu prüfen, ist die Verwendung von typeof, das für jeden Wert vom primitiven Typ Zahl die Zeichenkette "number" zurückgibt, einschließlich NaNInfinity, und -Infinity.

Ein Beispiel, bei dem eine Zahl als ein anderer Typ angezeigt werden könnte, was auf einen Fehler in meinem Code hinweist, wäre beim Parsen von Währungen:

In diesem Fall wüsste ich, dass ich vergessen habe, den String in eine Zahl zu parsen, wenn ich von typeof den Wert „string“ zurückerhalte.

Foto von Samuel Zeller auf Unsplash

Wenn ich parseFloat() verwende, um den Währungswert zu überprüfen, aber ich habe vergessen, das Währungssymbol zu entfernen, erhalte ich einen fehlgeschlagenen Parse und ein seltsames Ergebnis:

Oh, nein. In diesem Fall sieht es so aus, als würde typeof nicht so funktionieren, wie ich es erwartet habe – weil NaN-Werte in JavaScript als Zahlen betrachtet werden.

Foto von Gemma Evans auf Unsplash

Wenn das Schlüsselwort typeof „number“

Eine offensichtliche Lösung, um nach dem primitiven Typ number zu suchen, ist die Verwendung des Schlüsselworts typeof, wie ich oben gezeigt habe.

Aber typeof ist eine unvollständige Lösung, da es in JavaScript zwei spezielle Werte gibt: NaN („Not a Number“) und Infinity.

Für mein Währungsbeispiel weiß ich, dass ich einen Fehler habe, wenn mein Geldwert NaN oder Infinity ist, aber typeof liefert "number" für diese beiden Werte.

Vielleicht wurde meine Eingabe mit einem Währungssymbol geschrieben, und ich habe einfach versucht, parseFloat() zu verwenden, um den Wert zu erfassen. Das würde zu NaN führen:

Foto von Timo Kaiser auf Unsplash

Eine eigene isNumber() Funktion

Arobust, benutzerdefinierte isNumber() Funktion würde typeof verwenden, um auf den primitiven Typ zu prüfen, auf NaN Werte zu prüfen und auf Infinity zu prüfen:

Oder, für den Fall, dass man sich sicher ist, dass NaN und Infinity nicht auftauchen werden, würde die Überprüfung von typeof==="number" genügen.

Foto von 🇨🇭 Claudio Schwarz | @purzlbaum auf Unsplash

Der Einliner

Ich liebe Einzeiler. Ich denke, dass sie mit Kommentaren dokumentiert werden müssen, aber ich denke, dass sie eigentlich sehr nützlich sind, nicht nur schick.

Hier ist der Einzeiler dafür, wie man in JavaScript nach einer Zahl sucht:

Es gibt aber eine bessere Möglichkeit, in JavaScript auf eine endliche Zahl zu prüfen – die Hilfsfunktion Number.isFinite() hat das gleiche Verhalten wie die von mir geschriebene eigene isNumber()-Funktion. Ein Beispiel füge ich im nächsten Abschnitt ein.

Foto von Bernard Hermant auf Unsplash

Der einfachste Weg, eine Zahl zu überprüfen: Number.isFinite()

Es ist eigentlich unnötig, eigene Funktionen zu schreiben, um auf eine Zahl zu prüfen, allerdings ist es lehrreich, sich zu merken, dass die JavaScript-Werte Infinity-Infinity und NaN alle vom primitiven Typ Zahl sind.

„Die Methode Number.isFinite() ermittelt, ob der übergebene Wert eine endliche Zahl ist.“ – MDN Docs

Die Number.isFinite()-Methode liefert true für endliche Zahlen, und false für Infinity-Infinity, und NaN – genau das, was wir wollen:

Es gibt auch die globale isFinite()-Funktion, die eine Typenzwangskonstruktion durchführt (z. B. das Zwingen von Zeichenketten zu Zahlen), wie oben gezeigt.

Ich bespreche diese Methoden ausführlich in meinem Artikel über Infinity in Das Startup:

Foto von Bogomil Mihaylov auf Unsplash

Prüfen, ob eine Variable eine Ganzzahl ist

Um zu prüfen, ob die Variable A eine Ganzzahl ist, könnte ich den losen Gleichheitsoperator == verwenden, um zu sehen, ob der geparste Wert gleich sich selbst ist.

Der folgende Codeschnipsel zeigt ein Beispiel, wie man auf eine ganze Zahl prüft:

Die Verwendung von typeof würde einen String, der in eine Zahl umgewandelt wird, von einer tatsächlichen Zahl unterscheiden, ebenso wie der strenge Gleichheitsoperator ===.

Foto von Markus Spiske auf Unsplash

Währungssymbole ausblenden

Für eine bessere, robustere Funktion möchte ich Währungssymbole (z. B. das Dollarzeichen und eventuelle Kommata) zunächst herauslösen.

Das gründliche Parsen von Geld mit regulären Ausdrücken in JavaScript würde den Rahmen dieses Artikels sprengen, aber dieser Code entfernt $ und , vor dem Parsen:

Beachten Sie, dass die globalen Funktionen parseInt() und parseFloat() Werte in Strings umwandeln, wenn nötig, und geben NaN zurück, wenn die Umwandlung fehlschlägt.

Es gibt auch die Funktionen Numbers.parseInt() und Number.parseFloat(), die genau das gleiche Verhalten haben.

Laut den MDN Docs wurden diese doppelten Funktionen in ECMAScript 2015 für die „Zweckmodularisierung von Globals“ hinzugefügt.“

Foto von Toa Heftiba auf Unsplash

Hat JavaScript eigentlich separate Ganzzahlen?

Nein, JavaScript hat nur einen Zahlentyp, der intern als 64-Bit-Gleitkommadarstellung dargestellt wird.

Diese Gleitkommazahl ist der primitive Datentyp number, und es gibt auch einen Typ namens BigInt, der für beliebig große Zahlen verwendet werden kann.

Die globalen Funktionen parseInt() und parseFloat() unterscheiden sich in dem, was sie erwarten und ausgeben, aber nicht, weil es tatsächlich separate Integer- und Fließkommatypen in JavaScript gibt.

Foto von Volkan Olmez auf Unsplash

Fazit

Die Überprüfung einer Zahl in JavaScript ist nicht besonders kompliziert – typeof funktioniert im Grunde so, wie es sollte, solange man sich bewusst ist, dass sowohl NaN als auch Infinity die Zahl typeof haben.

Der einfachste Weg, auf eine endliche Zahl zu prüfen (d.h. nicht NaN oder Infinity) in JavaScript zu überprüfen, ist die Verwendung von Number.isFinite(), das Werte nicht in Zahlen umwandelt, oder des globalen isFinite(), das eine Typumwandlung durchführt.

Die Überprüfung auf eine ganze Zahl beinhaltet die Verwendung der Funktion parseInt(), gefolgt von einem Vergleich des geparsten Wertes mit sich selbst mittels == (das Nicht-Zahlenwerte wie Strings in Zahlen umwandelt) oder === (das nur true zurückgibt, wenn beide Werte Zahlen sind).

Unter der Haube sind Integers und Floats alle gleich: JavaScript hat nur einen Zahlentyp, den primitiven Typ number.

Foto von K. Mitch Hodge on Unsplash

Weitere Lektüre

  • Die Funktion Number.isInteger() zwingt Zeichenketten nicht zu Zahlen:
  • Sumit Kumar Pradhan schrieb über die Prüfung auf Zahlen auf Dev.to:
  • Chris Ferdinandi diskutierte das Parsen von Zahlen auf seinem Vanilla-JS-Blog:
  • Der reguläre Ausdruck ^+(\.{1,2})?$ passt auf Geld:
  • Sarah Dayan schrieb über das Parsen von Geld in JavaScript auf Frontstuff:

Foto von Alejandro Ortiz auf Unsplash

Schreibe einen Kommentar

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