Start · Sprachen · JavaScript · Referenz · Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITY

Eigenschaft

Die statische Eigenschaft <code>Number.POSITIVE_INFINITY</code> enthält den positiven Unendlichkeitswert, identisch mit dem globalen <code>Infinity</code>.

seit JavaScript ES1 (Baseline: alle Browser, Node.js) Kategorie: method-property

Signatur

Number.POSITIVE_INFINITY

Beschreibung

Number.POSITIVE_INFINITY ist eine statische, schreibgeschützte Dateneigenschaft des Number-Objekts. Ihr Wert ist genau derselbe wie der des globalen Infinity: ein IEEE-754-Gleitkommawert, der größer ist als jede andere Zahl. Sie wird nicht über eine Instanz aufgerufen, sondern immer als Number.POSITIVE_INFINITY.

Der Wert entsteht zum Beispiel bei einem Überlauf (Number.MAX_VALUE * 2) oder bei der Division einer positiven Zahl durch 0. Für die Arithmetik gelten eigene Regeln: Jede positive Zahl mal POSITIVE_INFINITY ergibt POSITIVE_INFINITY, jede negative Zahl mal POSITIVE_INFINITY ergibt NEGATIVE_INFINITY, 0 * POSITIVE_INFINITY und POSITIVE_INFINITY - POSITIVE_INFINITY ergeben NaN. Jede endliche Zahl geteilt durch POSITIVE_INFINITY ergibt 0.

Praktisch nutzt man den Wert vor allem als Startwert bei Minimumsuchen (jeder echte Wert ist kleiner), als „kein Limit“-Wert in Konfigurationen oder um Überläufe zu erkennen. Die ausgeschriebene Form ist in Code oft besser lesbar als Infinity, weil sofort klar ist, dass es um einen Zahlenwert geht.

Beispiele

Grundlegende Eigenschaften

console.log(Number.POSITIVE_INFINITY);
console.log(Number.POSITIVE_INFINITY === Infinity);
console.log(1 / 0 === Number.POSITIVE_INFINITY);
console.log(Number.MAX_VALUE * 2);
console.log(typeof Number.POSITIVE_INFINITY);
Infinity true true Infinity number

Startwert für die Minimumsuche

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

let guenstigster = Number.POSITIVE_INFINITY;
for (const preis of preise) {
  if (preis < guenstigster) guenstigster = preis;
}

// Leeres Array liefert weiterhin Infinity -> gezielt prüfen
console.log(guenstigster === Number.POSITIVE_INFINITY ? 'keine Preise' : guenstigster);
4.5

Überlauf erkennen und „kein Limit“ abbilden

const berechne = (a, b) => {
  const ergebnis = a * b;
  if (ergebnis === Number.POSITIVE_INFINITY) {
    throw new RangeError('Überlauf: Ergebnis zu groß');
  }
  return ergebnis;
};

const config = { maxVersuche: Number.POSITIVE_INFINITY };
console.log(5 < config.maxVersuche);

try {
  berechne(1e200, 1e200);
} catch (e) {
  console.log(e.message);
}
true Überlauf: Ergebnis zu groß

Sonderfälle der Arithmetik

const inf = Number.POSITIVE_INFINITY;
console.log(inf - inf);
console.log(0 * inf);
console.log(-2 * inf);
console.log(42 / inf);
console.log(Number.isFinite(inf));
NaN NaN -Infinity 0 false

// Wichtig · Fallstricke

  • JSON: JSON.stringify(Number.POSITIVE_INFINITY) ergibt "null". Unendlich geht beim Serialisieren also still verloren. Für APIs oder Speicherung sollte man den Wert selbst kodieren.
  • Keine Ganzzahl: Number.isInteger(Infinity) und Number.isSafeInteger(Infinity) liefern false. BigInt(Infinity) wirft einen RangeError.
  • Prüfen: Für „endlich?“ lieber Number.isFinite() verwenden als einen Vergleich mit POSITIVE_INFINITY, denn dann werden auch -Infinity und NaN erfasst. Das globale isFinite() wandelt Werte vorher um (isFinite("12") ergibt true).
  • Schreibgeschützt: Zuweisungen wie Number.POSITIVE_INFINITY = 1 werden ohne Meldung ignoriert, im Strict Mode lösen sie einen TypeError aus.
  • Math.min() ohne Argumente liefert Infinity, Math.max() ohne Argumente liefert -Infinity. Das ist ein häufiger Fallstrick bei Math.min(...leeresArray).
  • Wird von allen Browsern und Node.js unterstützt.