Start · Sprachen · JavaScript · Referenz · Number.MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGER

Eigenschaft

Statische Konstante mit der kleinsten sicheren Ganzzahl in JavaScript: <code>-(2**53 - 1)</code>, also <code>-9007199254740991</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Number.MIN_SAFE_INTEGER

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

Typ
number
Beschreibung
Immer -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);
-9007199254740991 true true

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));
true true false

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'));
-42 -9007199254740993n

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);
-3

// Wichtig · Fallstricke

  • Nicht mit Number.MIN_VALUE verwechseln: 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 in BigInt umwandeln.
  • Als Startwert für eine Maximum-Suche ist -Infinity oft 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).