Start · Sprachen · JavaScript · Referenz · isFinite()

isFinite()

Funktion

Die globale Funktion <code>isFinite()</code> prüft, ob ein Wert endlich ist, und wandelt ihn dazu bei Bedarf vorher in eine Zahl um.

seit JavaScript ES1 (Baseline: alle Browser, Node.js) Kategorie: core

Signatur

isFinite(value)

Beschreibung

isFinite() ist eine Funktion des globalen Objekts. Sie gibt true zurück, wenn der übergebene Wert nach der Umwandlung in eine Zahl endlich ist, also weder NaN noch Infinity oder -Infinity. In allen anderen Fällen gibt sie false zurück.

Wichtig ist die implizite Typumwandlung: Ist das Argument keine Zahl, wird es zuerst wie bei Number(value) umgewandelt. Deshalb liefern isFinite("42"), isFinite(""), isFinite(null) und isFinite(true) alle true. Leere Zeichenketten und null werden nämlich zu 0. Werte vom Typ BigInt oder Symbol lösen dabei einen TypeError aus.

Das Verhalten ist gewollt, wenn Sie „alles, was sich als endliche Zahl deuten lässt“ akzeptieren möchten, zum Beispiel beim schnellen Prüfen von Formulareingaben. Für eine strikte Prüfung, ob ein Wert wirklich eine endliche Zahl vom Typ number ist, ist Number.isFinite() die bessere Wahl. Diese Methode wandelt nichts um und gibt für jeden Wert, der keine Zahl ist, false zurück.

Parameter

Name Typ Default Beschreibung
$value Pflicht any Der zu prüfende Wert. Ist er keine Zahl, wird er vorher mit Number()-Semantik umgewandelt. Fehlt das Argument, wird undefined geprüft, und das Ergebnis ist false.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn der umgewandelte Wert eine endliche Zahl ist. false bei NaN, Infinity oder -Infinity.

Beispiele

Grundverhalten mit Zahlen und Sonderwerten

console.log(isFinite(42));        // true
console.log(isFinite(-3.14));     // true
console.log(isFinite(Infinity));  // false
console.log(isFinite(-Infinity)); // false
console.log(isFinite(NaN));       // false
console.log(isFinite(1 / 0));     // false
true true false false false false

Fallstrick: implizite Typumwandlung im Vergleich zu Number.isFinite()

const werte = ['42', '', ' ', null, true, undefined, '12px', [5]];

for (const w of werte) {
  console.log(JSON.stringify(w), isFinite(w), Number.isFinite(w));
}
"42" true false "" true false " " true false null true false true true false undefined false false "12px" false false [5] true false

Formulareingabe robust validieren

const parseBetrag = (eingabe) => {
  const text = String(eingabe).trim().replace(',', '.');
  // Leere Eingaben ausschließen, da isFinite('') true liefert
  if (text === '') return null;
  const zahl = Number(text);
  return Number.isFinite(zahl) ? zahl : null;
};

console.log(parseBetrag('19,99')); // 19.99
console.log(parseBetrag('  '));    // null
console.log(parseBetrag('1e400')); // null (Infinity)
console.log(parseBetrag('abc'));   // null
19.99 null null null

Division absichern

const durchschnitt = (summe, anzahl) => {
  const ergebnis = summe / anzahl;
  return isFinite(ergebnis) ? ergebnis : 0;
};

console.log(durchschnitt(100, 4)); // 25
console.log(durchschnitt(100, 0)); // 0 (statt Infinity)
console.log(durchschnitt(0, 0));   // 0 (statt NaN)
25 0 0

// Wichtig · Fallstricke

  • Überraschende Umwandlung: isFinite(""), isFinite(" "), isFinite(null), isFinite(false) und isFinite([]) liefern true, weil diese Werte zu 0 werden. Prüfen Sie leere Eingaben deshalb gesondert, oder verwenden Sie Number.isFinite().
  • TypeError: isFinite(10n) und isFinite(Symbol()) werfen einen TypeError, weil sich BigInt und Symbol nicht implizit in number umwandeln lassen. Number.isFinite(10n) gibt dagegen einfach false zurück.
  • Kein Ganzzahltest: isFinite(0.5) ist true. Ob eine Zahl ganzzahlig ist, prüfen Sie mit Number.isInteger() oder Number.isSafeInteger().
  • Objekte mit eigenem valueOf() oder Symbol.toPrimitive werden dabei aufgerufen. Das kann Nebenwirkungen haben.
  • Die Funktion wird in allen Browsern und in Node.js unterstützt. Viele Linter-Regeln (z. B. no-restricted-globals in ESLint-Konfigurationen wie Airbnb) empfehlen stattdessen Number.isFinite(), das seit ES2015 verfügbar ist.