Signatur
Beschreibung
Number.MIN_SAFE_INTEGER ist eine statische, schreibgeschützte Dateneigenschaft des Number-Konstruktors. Ihr Wert ist -9007199254740991, also -(253 - 1). Sie bildet die untere Grenze des Bereichs, in dem Ganzzahlen im IEEE-754-Format mit doppelter Genauigkeit (64 Bit) exakt dargestellt und eindeutig verglichen werden können.
„Sicher“ heißt hier: Jede Ganzzahl zwischen Number.MIN_SAFE_INTEGER und Number.MAX_SAFE_INTEGER hat genau eine Darstellung, und benachbarte Ganzzahlen bleiben unterscheidbar. Unterhalb dieser Grenze gehen Nachkommastellen der Mantisse verloren, sodass z. B. Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2 den Wert true liefert.
Verwende die Konstante, um Eingaben zu prüfen (etwa IDs, Zeitstempel oder Beträge aus externen Quellen), um Wertebereiche festzulegen oder um zu entscheiden, wann man auf BigInt umsteigen sollte. Für die eigentliche Prüfung einzelner Werte ist Number.isSafeInteger() meist die bessere Wahl.
Die Eigenschaft ist nicht schreibbar, nicht aufzählbar und nicht konfigurierbar. Da sie statisch ist, greift man immer über Number.MIN_SAFE_INTEGER zu, nicht über eine Zahleninstanz.
Rückgabewert
-9007199254740991 (-(2**53 - 1)).Beispiele
Wert auslesen und Grenze überprüfen
console.log(Number.MIN_SAFE_INTEGER);
console.log(Number.MIN_SAFE_INTEGER === -(2 ** 53 - 1));
console.log(Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER);
Genauigkeitsverlust unterhalb der Grenze
const a = Number.MIN_SAFE_INTEGER - 1;
const b = Number.MIN_SAFE_INTEGER - 2;
console.log(a === b); // beide werden auf denselben Wert gerundet
console.log(Number.isSafeInteger(Number.MIN_SAFE_INTEGER));
console.log(Number.isSafeInteger(a));
Eingabe validieren und bei Bedarf auf BigInt umsteigen
const parseAmount = (text) => {
const n = Number(text);
if (Number.isInteger(n) && n >= Number.MIN_SAFE_INTEGER && n <= Number.MAX_SAFE_INTEGER) {
return n;
}
// außerhalb des sicheren Bereichs: exakt als BigInt weiterrechnen
return BigInt(text);
};
console.log(parseAmount('-42'));
console.log(parseAmount('-9007199254740993'));
Startwert für eine Maximum-Suche
const scores = [-12, -3, -57, -8];
const max = scores.reduce(
(acc, v) => (v > acc ? v : acc),
Number.MIN_SAFE_INTEGER
);
console.log(max);
// Wichtig · Fallstricke
- Nicht mit
Number.MIN_VALUEverwechseln:Number.MIN_VALUE(ca.5e-324) ist die kleinste positive darstellbare Zahl, nicht die kleinste negative. Die kleinste überhaupt darstellbare Zahl ist-Number.MAX_VALUE. - Unterhalb der Grenze gibt es keinen Fehler und keine Warnung. Werte werden stillschweigend gerundet, was Vergleiche und Arithmetik verfälscht.
- Große IDs aus JSON-APIs (z. B. 64-Bit-Datenbankschlüssel) werden von
JSON.parse()ungenau eingelesen. Solche Werte sollte man besser als String übertragen und bei Bedarf inBigIntumwandeln. - Als Startwert für eine Maximum-Suche ist
-Infinityoft robuster, weil es auch mit Werten außerhalb des sicheren Bereichs funktioniert. - Die Konstante gibt es seit ES2015 in allen modernen Browsern und in Node.js, im Internet Explorer fehlt sie. Als Ersatz dient dort
-(Math.pow(2, 53) - 1).