Start · Sprachen · JavaScript · Referenz · Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY

Eigenschaft

Die statische Eigenschaft <code>Number.NEGATIVE_INFINITY</code> enthält den Wert negative Unendlichkeit (<code>-Infinity</code>).

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

Signatur

Number.NEGATIVE_INFINITY

Beschreibung

Number.NEGATIVE_INFINITY ist eine statische, schreibgeschützte Dateneigenschaft des Number-Konstruktors. Ihr Wert ist identisch mit -Infinity, also dem kleinsten Wert, den der Typ number (IEEE-754-Gleitkommazahl mit doppelter Genauigkeit) darstellen kann. Er ist kleiner als jede andere Zahl, auch als -Number.MAX_VALUE.

Negative Unendlichkeit entsteht zum Beispiel, wenn eine negative Zahl durch 0 geteilt wird (-1 / 0) oder wenn ein Rechenergebnis kleiner als -Number.MAX_VALUE wird (Überlauf, z. B. -Number.MAX_VALUE * 2).

In der Praxis ist die Eigenschaft vor allem als Startwert bei der Maximumsuche nützlich: Jeder echte Zahlenwert ist größer, deshalb wird er beim ersten Vergleich übernommen. Auch als Sentinel-Wert für „keine untere Grenze“ oder um Überläufe zu erkennen, ist sie gebräuchlich. Weil es sich um eine statische Eigenschaft handelt, wird sie immer als Number.NEGATIVE_INFINITY angesprochen und nie über eine Zahleninstanz.

Rückgabewert

Typ
number
Beschreibung
Immer -Infinity. Die Eigenschaft ist nicht beschreibbar (writable: false), nicht aufzählbar (enumerable: false) und nicht konfigurierbar (configurable: false).

Beispiele

Grundlegende Werte und Vergleiche

console.log(Number.NEGATIVE_INFINITY);
console.log(Number.NEGATIVE_INFINITY === -Infinity);
console.log(-1 / 0 === Number.NEGATIVE_INFINITY);
console.log(-Number.MAX_VALUE * 2);
console.log(Number.NEGATIVE_INFINITY < -Number.MAX_VALUE);
-Infinity true true -Infinity true

Startwert für die Maximumsuche

const messwerte = [-12.5, -3.2, -40, -7.9];

const maximum = messwerte.reduce(
  (max, wert) => (wert > max ? wert : max),
  Number.NEGATIVE_INFINITY
);

console.log(maximum);

// Leeres Array liefert den Startwert zurück
const leer = [].reduce((max, w) => Math.max(max, w), Number.NEGATIVE_INFINITY);
console.log(leer);
-3.2 -Infinity

Überlauf erkennen und abfangen

const sicheresProdukt = (a, b) => {
  const ergebnis = a * b;
  if (ergebnis === Number.NEGATIVE_INFINITY) {
    throw new RangeError('Negativer Überlauf bei der Multiplikation');
  }
  return ergebnis;
};

console.log(sicheresProdukt(-2, 21));
try {
  sicheresProdukt(-1e308, 10);
} catch (fehler) {
  console.log(fehler.message);
}
-42 Negativer Überlauf bei der Multiplikation

Rechenregeln mit negativer Unendlichkeit

const ninf = Number.NEGATIVE_INFINITY;

console.log(ninf + 1000);          // bleibt -Infinity
console.log(ninf * -1);            // Infinity
console.log(ninf * 0);             // NaN
console.log(ninf + Infinity);      // NaN
console.log(1 / ninf);             // -0
console.log(Object.is(1 / ninf, -0));
console.log(Number.isFinite(ninf));
-Infinity Infinity NaN NaN -0 true false

// Wichtig · Fallstricke

  • Kein Parameter, keine Methode: Number.NEGATIVE_INFINITY ist eine Konstante. Ein Aufruf wie Number.NEGATIVE_INFINITY() wirft einen TypeError. Über eine Instanz ((5).NEGATIVE_INFINITY) bekommt man undefined.
  • Schreibgeschützt: Zuweisungen werden im nicht-strikten Modus stillschweigend ignoriert und werfen im strikten Modus einen TypeError.
  • NaN-Fallen: -Infinity * 0, -Infinity + Infinity und -Infinity / -Infinity ergeben NaN. Teilt man eine endliche Zahl durch -Infinity, entsteht -0. Das lässt sich nur mit Object.is() zuverlässig von +0 unterscheiden.
  • JSON: JSON.stringify(-Infinity) liefert "null". Unendliche Werte bleiben bei der Serialisierung also nicht erhalten.
  • Prüfen: Number.isFinite(x) meldet sowohl ±Infinity als auch NaN als nicht endlich. Wer gezielt auf negative Unendlichkeit testen will, vergleicht mit x === Number.NEGATIVE_INFINITY.
  • Math.max() ohne Argumente gibt -Infinity zurück. Das passiert auch bei Math.max(...[]) mit einem leeren Array und ist eine häufige Fehlerquelle.
  • BigInt: BigInt kennt keine Unendlichkeit. BigInt(-Infinity) wirft einen RangeError.
  • Kompatibilität: Die Eigenschaft wird seit ECMAScript 1 von allen Browsern und von Node.js unterstützt.