Ganzzahltypen (Ganzzahl) verursachen häufig einige seltsame Probleme im JavaScript. In der Spezifikation von ECMAScript existieren sie nur im Konzept:
Alle Zahlen sind schwimmende Punktzahlen, und Ganzzahlen haben einfach keine Reihe von Zahlen ohne Dezimalstellen.
In diesem Blog werde ich erklären, wie man prüft, ob ein Wert eine Ganzzahl ist.
ECMascript 5
Es gibt viele Möglichkeiten, wie Sie in ES5 verwenden können. Manchmal möchten Sie möglicherweise Ihre eigene Methode verwenden: eine Funktion von Isideger (x), die true zurückgibt, wenn es sich um eine Ganzzahl handelt, und ansonsten false zurückgibt.
Schauen wir uns einige Beispiele an.
Geben Sie den Restscheck bestehen
Sie können den Restbetrieb (%) verwenden und den Rest um 1 berechnen, um festzustellen, ob der Rest 0 ist.
Funktion Issineger (x) {return x % 1 === 0;}Ich mag diese Methode, weil sie sehr einfach und effektiv ist.
> Issineger (17) True> Issineger (17.13) Falsch
Sie müssen beim Betrieb von Restvorgängen vorsichtig sein, da das Ergebnis vom Vorzeichen der ersten Zahl abhängt. Wenn es positiv ist, ist das Ergebnis positiv; Ansonsten ist es negativ.
> 3,5 % 10,5> -3,5 % 1-0,5
Dann können wir auch 0 überprüfen, was eigentlich kein Problem ist. Das Problem ist jedoch: Diese Methode kehrt auch für Nicht-Zahlen ein, da % es in eine Zahl umwandeln wird:
> Issineger ('') true> Issineger ('33') true> Issineger (falsch) true> Issineger (true) trueEs kann durch einfache Typüberprüfung gelöst werden:
Funktion isTineger (x) {return (typeof x === 'nummer') && (x % 1 === 0);}Von math.round () Wenn eine Zahl abgerundet ist und immer noch den gleichen Wert hat wie der vorherige, dann ist es eine Ganzzahl. In JavaScript können Sie es über math.round () überprüfen:
Funktion Issineger (x) {return math.round (x) === x;}Diese Methode ist auch gut
> Issineger (17) True> Issineger (17.13) Falsch
Es kann auch nicht numerisch beurteilen, da Math.Round () immer Zahlen zurückgibt und === true nur dann zurückgibt, wenn der Typ gleich ist.
> Issineger ('') FalschWenn Sie den Code klarer machen möchten, können Sie die Typ -Überprüfung hinzufügen (was wir in der vorherigen Version gemacht haben). Zusätzlich können math.floor () und math.ceil () wie math.round () arbeiten. Das Überprüfen von Bit -Operatoren über Bit -Operationen bietet eine weitere Methode zur "Rundung":
Funktion Issineger (x) {return (x | 0) === x;}Diese Lösung (wie andere Bitvorgänge) hat einen Nachteil: Sie kann keine Zahlen überschreiten, die 32 Bit überschreiten.
> Issineger (Math.Pow (2, 32)) Falsch
Das Überprüfen von ParseInt () über ParseInt () bietet auch eine ähnliche Methode wie Mathematik.round (), um Zahlen in Ganzzahlen umzuwandeln. Lassen Sie uns sehen, warum diese Methode gut ist.
Funktion Issineger (x) {return parseInt (x, 10) === x;}Wie bei der Mathematik-Lösung kann sie nicht numerische Fälle verarbeiten, aber auch nicht alle Ganzzahlzahlen ordnungsgemäß behandelt:
> INTIINGEGER (1000000000000000000000000) Falsch
Warum? ParseInt () erzwingt den ersten Parameter, der vor dem Parsen einer Ganzzahl in eine Schnur analysiert wird. Daher ist die Verwendung dieser Methode zur Umwandlung von Zahlen in Ganzzahlen keine gute Wahl.
> ParseInt (1000000000000000000000000, 10) 1> String (100000000000000000000000) '1E+21'
Genau wie oben beendet ParseInt () die Verarbeitung bei 1, wenn sie '1E+21' analysiert werden. Daher kehrt es 1. ECMascript 6 für Mathematik.Round () Wurf -Addition zurück, ES6 bietet eine andere Methode, um Zahlen in Ganzzahlen umzuwandeln. Diese Funktion entfernt den fraktionalen Teil der Zahl.
> Math.Trunc (4.1) 4> Math.Trunc (4.9) 4> Math.Trunc (-4.1) -4> Math.Trunc (-4.9) -4
Darüber hinaus muss ECMascript6 nicht mit trivialen Aufgaben umgehen, die Ganzzahlen überprüfen, da sie eine integrierte Funktionsnummer enthält. Issinter ().