Signatur
Beschreibung
Die Methode arguments[Symbol.iterator]() implementiert das iterierbare Protokoll für das arguments-Objekt. Deshalb kann arguments überall verwendet werden, wo ein Iterable erwartet wird: in for...of-Schleifen, in der Spread-Syntax ([...arguments]), in Array.from(), bei der Array-Destrukturierung oder als Eingabe für new Set() und Promise.all().
Der Anfangswert dieser Eigenschaft ist dasselbe Funktionsobjekt wie Array.prototype.values. Es wird also ein Array-Iterator erzeugt, der die Werte der Indizes 0 bis arguments.length - 1 der Reihe nach liefert. Die Eigenschaft ist beschreibbar und konfigurierbar, aber nicht aufzählbar.
In der Praxis ruft man die Methode selten direkt auf – die Sprache erledigt das implizit. Wichtig ist sie vor allem für älteren Code oder Funktionen, die bewusst mit variabler Argumentzahl arbeiten, ohne Rest-Parameter (...args) zu verwenden. In modernem Code sind Rest-Parameter meist die bessere Wahl, da sie ein echtes Array liefern.
Rückgabewert
arguments-Objekt nacheinander liefert ({ value, done }).Beispiele
Iteration mit for...of
function summe() {
let gesamt = 0;
// for...of ruft intern arguments[Symbol.iterator]() auf
for (const zahl of arguments) {
gesamt += zahl;
}
return gesamt;
}
console.log(summe(1, 2, 3, 4));
Iterator manuell verwenden
function zeigeArgumente() {
const iterator = arguments[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
}
zeigeArgumente('a', 'b');
arguments per Spread in ein echtes Array umwandeln
function eindeutigeTags() {
// Spread und Set nutzen beide das iterierbare Protokoll
const tags = [...new Set(arguments)];
return tags.map((t) => t.toLowerCase()).sort();
}
console.log(eindeutigeTags('JS', 'Web', 'JS', 'DOM'));
Identität mit Array.prototype.values
function pruefen() {
return arguments[Symbol.iterator] === Array.prototype.values;
}
console.log(pruefen());
// Wichtig · Fallstricke
- Arrow-Funktionen besitzen kein eigenes
arguments. Innerhalb einer Arrow-Funktion verweistargumentsauf das der umgebenden regulären Funktion – auf oberster Modulebene führt der Zugriff zu einemReferenceError. argumentsist trotz Iterierbarkeit kein Array: Methoden wiemap()oderfilter()fehlen. MitArray.from(arguments)oder[...arguments]erhält man ein echtes Array.- Der Iterator ist live: Änderungen an
arguments(oder im nicht-strikten Modus an den verknüpften Parametern) während der Iteration wirken sich auf die gelieferten Werte aus. - Da die Eigenschaft beschreibbar ist, kann sie überschrieben oder gelöscht werden – danach schlagen
for...ofund Spread mit einemTypeErrorfehl. - Moderne Alternative: Rest-Parameter (
function f(...args)) liefern direkt ein Array und sind lesbarer sowie besser optimierbar. - Kompatibilität: ES2015, in allen modernen Browsern und Node.js unterstützt; im Internet Explorer nicht verfügbar.