JavaScript/Objekte/Number/isSafeInteger
Die Methode Number.isSafeInteger(wert)
prüft, ob der angegebene Wert eine Ganzzahl ist und in dem für Integerwerte sicheren Zahlenintervall Number.MIN_SAFE_INTEGER
bis Number.MAX_SAFE_INTEGER
. Damit ist sie strenger als Number.isInteger()
, das auf die Prüfung des Zahlenintervalls verzichtet und deshalb für alle Werte außerhalb dieses Intervalls true
meldet.
Syntax
Number.isSafeInteger(wert);
wert
: Der zu prüfende Wert.
Rückgabewert
-
false
- wenn
Number.isInteger(wert)
den Wertfalse
zurückgibt. - wenn
wert
außerhalb des Intervalls -(253-1) .. -253-1 liegt -
true
- für alle anderen number-Werte.
Zahlen werden in JavaScript durch IEEE 754 Fließkommazahlen in doppelter Präzision repräsentiert. Dieses Zahlenformat hat die Eigenschaft, auch noch sehr große Werte darstellen zu können, aber nur mit begrenzter Genauigkeit. Dazu wird ein ganzzahliger Wert mit bis zu 53 Bits gespeichert und mit einem Faktor von 2n skaliert.
Wenn Sie eine echte Ganzzahl ohne Nachkommastellen speichern wollen, müssen Sie also eine IEEE 754 Fließkommazahl mit einem Skalierungsfaktor von 1 (oder 20) verwenden. Daraus ergibt sich ein verwendbarer Zahlenbereich von -(253-1) bis 253-1. Bei Werten außerhalb dieses Intervalls lässt das Zahlenformat keine Nachkommastellen mehr zu, weswegen Math.floor
keine Nachkommastellen mehr entfernen kann und Number.isInteger
immer true
liefert.
Polyfill
Die isSafeInteger
-Methode des Number-Objekts wurde mit ECMAScript 2015 (ES6) eingeführt. Wenn Sie ältere Browser unterstützen möchten, können Sie auf einfache Weise einen Polyfill erzeugen. Da die Konstanten MAX_SAFE_INTEGER und MIN_SAFE_INTEGER mit isSafeInteger
in Verbindung stehen, sollte ein Polyfill alle drei Eigenschaften bereitstellen.
if (!Number.isSafeInteger) {
Number.MAX_SAFE_INTEGER = 9007199254740991;
Number.MIN_SAFE_INTEGER = -9007199254740991;
Number.isSafeInteger = function(value) {
return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
}
}