Start · Sprachen · JavaScript · Referenz · arguments.length

arguments.length

Eigenschaft

Die Dateneigenschaft <code>arguments.length</code> gibt an, wie viele Argumente beim Aufruf tatsächlich an eine Funktion übergeben wurden.

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

Signatur

arguments.length

Beschreibung

arguments.length enthält die Anzahl der Argumente, die beim tatsächlichen Aufruf an eine (nicht-Pfeil-)Funktion übergeben wurden. Das kann mehr oder weniger sein als die Zahl der deklarierten Parameter. Im Gegensatz dazu liefert Function.prototype.length die Anzahl der deklarierten Parameter (ohne Rest-Parameter und ohne Parameter nach dem ersten mit Standardwert).

Typische Einsatzgebiete sind variadische Funktionen in älterem Code, das Prüfen, ob ein optionales Argument überhaupt übergeben wurde (auch wenn es explizit undefined ist), sowie einfache Überladungen nach Argumentanzahl.

Die Eigenschaft ist beschreibbar, konfigurierbar und nicht aufzählbar. Ein Überschreiben ändert nur den Wert der Eigenschaft, nicht die tatsächlich übergebenen Argumente. In modernem Code sind Rest-Parameter (...args) meist die bessere Wahl: args.length leistet dasselbe, und args ist ein echtes Array.

Rückgabewert

Typ
number
Beschreibung
Nicht-negative Ganzzahl: die Anzahl der beim Aufruf übergebenen Argumente, explizit übergebene undefined-Werte eingeschlossen.

Beispiele

Übergebene vs. deklarierte Argumente

function info(a, b, c) {
  console.log(`Übergeben: ${arguments.length}, deklariert: ${info.length}`);
}

info(1);
info(1, 2, 3, 4);
info(undefined, undefined);
Übergeben: 1, deklariert: 3 Übergeben: 4, deklariert: 3 Übergeben: 2, deklariert: 3

Variadische Summe (klassisch und mit Rest-Parametern)

function summe() {
  let total = 0;
  for (let i = 0; i < arguments.length; i++) {
    total += arguments[i];
  }
  return total;
}

// Moderne Alternative
const summeModern = (...zahlen) => zahlen.reduce((acc, n) => acc + n, 0);

console.log(summe(1, 2, 3, 4));
console.log(summeModern(1, 2, 3, 4));
10 10

Unterscheiden: Argument fehlt oder ist undefined

function setzeWert(obj, schluessel, wert) {
  if (arguments.length < 3) {
    throw new TypeError('setzeWert erwartet 3 Argumente');
  }
  obj[schluessel] = wert; // undefined ist hier ein gültiger Wert
  return obj;
}

console.log(setzeWert({}, 'x', undefined));
try {
  setzeWert({}, 'x');
} catch (e) {
  console.log(e.message);
}
{ x: undefined } setzeWert erwartet 3 Argumente

// Wichtig · Fallstricke

  • Pfeilfunktionen haben kein eigenes arguments-Objekt. Dort verweist arguments auf das der umgebenden Funktion, oder es kommt zu einem ReferenceError (z. B. auf Modulebene). Nutze stattdessen Rest-Parameter.
  • Nicht verwechseln mit Function.prototype.length: fn.length zählt die deklarierten Parameter, arguments.length die tatsächlich übergebenen.
  • Die Eigenschaft ist beschreibbar: arguments.length = 0 ändert nur den Zähler, nicht die Einträge. Methoden, die sich auf length stützen (z. B. Array.from(arguments)), liefern danach aber abweichende Ergebnisse.
  • Standardwerte zählen nicht mit: Bei function f(a = 1) {} liefert f() für arguments.length den Wert 0.
  • Die Verwendung von arguments kann in manchen Engines Optimierungen erschweren. In performancekritischem Code sind Rest-Parameter vorzuziehen.