Start · Sprachen · JavaScript · Referenz · Number.MAX_VALUE

Number.MAX_VALUE

Eigenschaft

Die statische Eigenschaft <code>Number.MAX_VALUE</code> enthält die größte endliche Zahl, die JavaScript darstellen kann (ca. <code>1.7976931348623157e+308</code>).

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

Number.MAX_VALUE

Beschreibung

Number.MAX_VALUE ist die größte positive, endliche Zahl vom Typ number. Sie entspricht dem Wert 21024 − 2971, also ungefähr 1.7976931348623157e+308, und ergibt sich aus dem Format IEEE 754 (doppelte Genauigkeit, 64 Bit), das JavaScript für alle number-Werte verwendet.

Die Eigenschaft ist statisch: Du rufst sie immer als Number.MAX_VALUE auf, nicht über eine Zahleninstanz. Sie ist nicht beschreibbar, nicht aufzählbar und nicht konfigurierbar, lässt sich also weder ändern noch löschen.

Praktisch nutzt man Number.MAX_VALUE vor allem als Startwert bei der Suche nach einem Minimum, als Obergrenze bei Plausibilitätsprüfungen oder um einen Überlauf zu erkennen. Ergibt eine Rechnung einen Wert oberhalb dieser Grenze (nach Rundung), wird das Ergebnis zu Infinity.

Wichtig: MAX_VALUE ist nicht die größte Ganzzahl, mit der man sicher rechnen kann. Dafür gibt es Number.MAX_SAFE_INTEGER (253 − 1). Oberhalb davon lassen sich Ganzzahlen nicht mehr exakt darstellen, auch wenn sie noch weit unter MAX_VALUE liegen.

Beispiele

Wert ausgeben und mit Infinity vergleichen

console.log(Number.MAX_VALUE);
console.log(Number.MAX_VALUE < Infinity);
console.log(Number.isFinite(Number.MAX_VALUE));
1.7976931348623157e+308 true true

Überlauf erkennen

const multiplySafe = (a, b) => {
  const result = a * b;
  if (!Number.isFinite(result)) {
    throw new RangeError(`Überlauf: ${a} * ${b} > Number.MAX_VALUE`);
  }
  return result;
};

console.log(multiplySafe(1e150, 1e150));
try {
  multiplySafe(Number.MAX_VALUE, 2);
} catch (err) {
  console.log(err.message);
}
1e+300 Überlauf: 1.7976931348623157e+308 * 2 > Number.MAX_VALUE

Startwert für die Suche nach einem Minimum

const prices = [19.99, 4.5, 12, 7.25];

const cheapest = prices.reduce(
  (min, price) => (price < min ? price : min),
  Number.MAX_VALUE
);

console.log(cheapest);
4.5

Rundung an der Grenze: + 1 ändert nichts

// Kleine Summanden gehen durch die begrenzte Genauigkeit verloren
console.log(Number.MAX_VALUE + 1 === Number.MAX_VALUE);
// Erst ein ausreichend großer Summand führt zu Infinity
console.log(Number.MAX_VALUE + 1e292);
console.log(Number.MAX_VALUE * 1.0000001);
true Infinity Infinity

// Wichtig · Fallstricke

  • Nicht mit MAX_SAFE_INTEGER verwechseln: Ganzzahlen über Number.MAX_SAFE_INTEGER (9007199254740991) verlieren an Genauigkeit, z. B. ist 2 ** 53 + 1 === 2 ** 53 gleich true. Für große Ganzzahlen solltest du BigInt verwenden.
  • Rundung statt Überlauf: Number.MAX_VALUE + 1 ergibt wieder Number.MAX_VALUE und nicht Infinity, weil der Summand beim Runden verloren geht. Einen Überlauf prüfst du deshalb besser mit Number.isFinite().
  • Nicht der kleinste Wert: Die kleinste Zahl ist -Number.MAX_VALUE bzw. -Infinity. Number.MIN_VALUE ist dagegen die kleinste positive Zahl (≈ 5e-324) und nicht die negativste.
  • Als Startwert für Minimum-Suchen ist Infinity oft die sauberere Wahl, weil wirklich jeder endliche Wert kleiner ist.
  • Die Eigenschaft wird von allen JavaScript-Umgebungen unterstützt (Browser, Node.js, Deno).