Heim > Web-Frontend > js-Tutorial > Hauptteil

Beispiele für N Möglichkeiten zur Bestimmung von Ganzzahltypen in JavaScript_Javascript-Kenntnissen

WBOY
Freigeben: 2016-05-16 16:43:53
Original
1156 Leute haben es durchsucht

Der Ganzzahltyp (Integer) verursacht in JavaScript häufig seltsame Probleme. In der ECMAScript-Spezifikation existieren sie nur als Konzepte:

Alle Zahlen sind Gleitkommazahlen und ganze Zahlen sind nur eine Menge von Zahlen ohne Dezimalstellen.

In diesem Blog erkläre ich, wie man prüft, ob ein Wert eine Ganzzahl ist.
ECMAScript 5

Es gibt viele Methoden, die Sie in ES5 verwenden können. Manchmal möchten Sie vielleicht Ihre eigene Methode verwenden: eine Funktion isInteger(x), die true zurückgibt, wenn es eine Ganzzahl ist, andernfalls false.

Schauen wir uns einige Beispiele an.

Restprüfung bestanden

Sie können die Restoperation (%) verwenden, um den Rest einer Zahl um 1 zu berechnen, um zu sehen, ob der Rest 0 ist.

function isInteger(x) {
  return x % 1 === 0;
}
Nach dem Login kopieren

Ich mag diese Methode, weil sie sehr einfach und effektiv ist.

> isInteger(17)
true
> isInteger(17.13)
false
Nach dem Login kopieren
Nach dem Login kopieren

Sie müssen bei Restoperationen vorsichtig sein, da das Ergebnis vom Vorzeichen der ersten Zahl abhängt. Wenn es positiv ist, ist es ansonsten negativ.

> 3.5 % 1
0.5
> -3.5 % 1
-0.5
Nach dem Login kopieren

Dann können wir auch nach 0 suchen, was eigentlich kein Problem darstellt. Das Problem ist jedoch: Diese Methode gibt auch für Nicht-Zahlen true zurück, da % sie in eine Zahl umwandelt:

> isInteger('')
true
> isInteger('33')
true
> isInteger(false)
true
> isInteger(true)
true
Nach dem Login kopieren

Kann mit einer sehr einfachen Typprüfung gelöst werden:

function isInteger(x) {
  return (typeof x === 'number') && (x % 1 === 0);
}
Nach dem Login kopieren

Wenn eine Zahl durch Math.round() mit ihrem vorherigen Wert nach dem Runden übereinstimmt, ist sie eine Ganzzahl. Dies kann über Math.round() in JavaScript überprüft werden:

function isInteger(x) {
  return Math.round(x) === x;
}
Nach dem Login kopieren

Diese Methode ist auch gut

> isInteger(17)
true
> isInteger(17.13)
false
Nach dem Login kopieren
Nach dem Login kopieren

Es können auch Nicht-Zahlen ermittelt werden, da Math.round() immer Zahlen zurückgibt und === nur dann true zurückgibt, wenn die Typen gleich sind.

> isInteger('')
false
Nach dem Login kopieren

Wenn Sie den Code etwas klarer gestalten möchten, können Sie eine Typprüfung hinzufügen (was wir in früheren Versionen getan haben). Darüber hinaus funktionieren Math.floor() und Math.ceil() wie Math.round(). Überprüfen durch Bitoperationen Bitoperatoren bieten eine weitere Möglichkeit zum „Runden“:

function isInteger(x) {
  return (x | 0) === x;
}
Nach dem Login kopieren

Diese Lösung hat (wie andere bitweise Operationen) einen Fehler: Sie kann keine Zahlen verarbeiten, die größer als 32 Bit sind.

> isInteger(Math.pow(2, 32))
false
Nach dem Login kopieren

Überprüfung durch parseInt() parseInt() bietet auch eine Methode ähnlich wie Math.round(), um Zahlen in ganze Zahlen umzuwandeln. Mal sehen, warum diese Methode gut ist.

function isInteger(x) {
  return parseInt(x, 10) === x;
}
Nach dem Login kopieren

Wie die Math.round()-Lösung kann sie auch nicht-numerische Fälle verarbeiten, aber auch nicht alle Ganzzahlen korrekt:

> isInteger(1000000000000000000000)
false
Nach dem Login kopieren

Warum? parseInt() erzwingt, dass das erste Argument als Zeichenfolge analysiert wird, bevor eine Ganzzahl analysiert wird. Daher ist die Verwendung dieser Methode zur Konvertierung von Zahlen in ganze Zahlen keine gute Wahl.

> parseInt(1000000000000000000000, 10)
1
> String(1000000000000000000000)
'1e+21'
Nach dem Login kopieren

Genau wie oben hat parseInt() die Verarbeitung beim Parsen von „1e 21“ bei 1 gestoppt, sodass 1 zurückgegeben wird. ECMAScript 6 Zusätzlich zu Math.round() bietet ES6 eine weitere Zahlmethode zum Konvertieren in eine Ganzzahl: Math .trunc(). Diese Funktion entfernt den Dezimalteil einer Zahl.

> Math.trunc(4.1)
4
> Math.trunc(4.9)
4
> Math.trunc(-4.1)
-4
> Math.trunc(-4.9)
-4
Nach dem Login kopieren

Darüber hinaus muss sich ECMAScript 6 nicht mit der trivialen Aufgabe der Prüfung von Ganzzahlen befassen, da es über eine integrierte Funktion Number.isInteger() verfügt.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage