Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Das arguments-Objekt
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
* Some parts of this feature may have varying levels of support.
arguments ist ein array-ähnliches Objekt, das innerhalb vonFunktionen zugänglich ist und die Werte der an diese Funktion übergebenen Argumente enthält.
In diesem Artikel
Probieren Sie es aus
function func1(a, b, c) { console.log(arguments[0]); // Expected output: 1 console.log(arguments[1]); // Expected output: 2 console.log(arguments[2]); // Expected output: 3}func1(1, 2, 3);Beschreibung
Hinweis:In modernem Code solltenRest-Parameter bevorzugt werden.
Dasarguments-Objekt ist eine lokale Variable, die innerhalb aller nicht-Arrow-Funktionen verfügbar ist. Sie können auf die Argumente einer Funktion innerhalb dieser Funktion durch Verwendung desarguments-Objekts zugreifen. Es hat Einträge für jedes Argument, mit dem die Funktion aufgerufen wurde, wobei der Index des ersten Eintrags bei0 beginnt.
Zum Beispiel, wenn eine Funktion mit 3 Argumenten aufgerufen wird, können Sie auf diese wie folgt zugreifen:
arguments[0]; // first argumentarguments[1]; // second argumentarguments[2]; // third argumentDasarguments-Objekt ist nützlich für Funktionen, die mit mehr Argumenten aufgerufen werden, als sie formell zu akzeptieren deklariert sind, genanntvariadische Funktionen, wie z.B.Math.min(). Diese Beispiel-Funktion akzeptiert eine beliebige Anzahl von Zeichenfolgen-Argumenten und gibt die längste zurück:
function longestString() { let longest = ""; if (arguments.length === 0) { throw new TypeError("At least one string is required"); } for (const arg of arguments) { if (arg.length > longest.length) { longest = arg; } } return longest;}Sie könnenarguments.length verwenden, um zu zählen, wie viele Argumente die Funktion übergeben wurden. Wenn Sie stattdessen zählen möchten, wie viele Parameter eine Funktion zu akzeptieren deklariert ist, inspizieren Sie dielength-Eigenschaft dieser Funktion.
Zuweisung zu Indizes
Jeder Argumentindex kann auch gesetzt oder neu zugewiesen werden:
arguments[1] = "new value";Nicht-strikte Funktionen, die nur einfache Parameter haben (d.h. keine Rest-, Standard- oder destrukturierten Parameter), synchronisieren den neuen Wert von Parametern mit demarguments-Objekt und umgekehrt:
function func(a) { arguments[0] = 99; // updating arguments[0] also updates a console.log(a);}func(10); // 99function func2(a) { a = 99; // updating a also updates arguments[0] console.log(arguments[0]);}func2(10); // 99Nicht-strikte Funktionen, dieRest-,Standard oderdestruierte Parameter übergeben bekommen, synchronisieren keine neuen, im Funktionskörper zugewiesenen Parameterwerte mit demarguments-Objekt. Stattdessen spiegelt dasarguments-Objekt in nicht-strikten Funktionen mit komplexen Parametern immer die Werte wider, die der Funktion übergeben wurden, als die Funktion aufgerufen wurde.
function funcWithDefault(a = 55) { arguments[0] = 99; // updating arguments[0] does not also update a console.log(a);}funcWithDefault(10); // 10function funcWithDefault2(a = 55) { a = 99; // updating a does not also update arguments[0] console.log(arguments[0]);}funcWithDefault2(10); // 10// An untracked default parameterfunction funcWithDefault3(a = 55) { console.log(arguments[0]); console.log(arguments.length);}funcWithDefault3(); // undefined; 0Dies ist das gleiche Verhalten, das allestrict-mode Funktionen zeigen, unabhängig vom Typ der übergebenen Parameter. Das heißt, die Zuweisung neuer Werte zu Parametern im Körper der Funktion beeinflusst nie dasarguments-Objekt, genauso wenig wie die Zuweisung neuer Werte zu den Indizes vonarguments den Wert von Parametern beeinflusst, selbst wenn die Funktion nur einfache Parameter hat.
Hinweis:Sie können keine"use strict";-Direktive im Körper einer Funktionsdefinition schreiben, die Rest-, Standard- oder destrukturierte Parameter akzeptiert. Dies führt zueinem Syntaxfehler.
arguments ist ein array-ähnliches Objekt
arguments ist ein array-ähnliches Objekt, was bedeutet, dassarguments einelength-Eigenschaft und von Null indizierte Eigenschaften hat, aber nicht über die eingebauten Methoden vonArray, wie z.B.forEach() odermap(), verfügt. Es kann jedoch in ein echtesArray umgewandelt werden, indem man eine vonslice(),Array.from(), oderSpread-Syntax verwendet.
const args = Array.prototype.slice.call(arguments);// orconst args = Array.from(arguments);// orconst args = [...arguments];Für allgemeine Anwendungsfälle reicht es aus, es als array-ähnliches Objekt zu verwenden, da es sowohliterierbar ist als auchlength und numerische Indizes hat. Zum Beispiel akzeptiertFunction.prototype.apply() array-ähnliche Objekte.
function midpoint() { return ( (Math.min.apply(null, arguments) + Math.max.apply(null, arguments)) / 2 );}console.log(midpoint(3, 1, 4, 1, 5)); // 3Eigenschaften
arguments.calleeVeraltetReferenz auf die aktuell ausgeführte Funktion, zu der die Argumente gehören. In strict mode verboten.
arguments.lengthDie Anzahl der Argumente, die der Funktion übergeben wurden.
arguments[Symbol.iterator]()Gibt ein neuesArray Iterator-Objekt zurück, das die Werte für jeden Index in
argumentsenthält.
Beispiele
>Definition einer Funktion, die mehrere Zeichenfolgen konkateniert
Dieses Beispiel definiert eine Funktion, die mehrere Zeichenfolgen konkateniert. Das einzige formale Argument der Funktion ist eine Zeichenfolge, die die Zeichen enthält, die die zu konkatenierten Elemente trennen.
function myConcat(separator) { const args = Array.prototype.slice.call(arguments, 1); return args.join(separator);}Sie können dieser Funktion beliebig viele Argumente übergeben. Sie gibt eine Zeichenfolgenliste zurück, indem sie jedes Argument in der Liste verwendet:
myConcat(", ", "red", "orange", "blue");// "red, orange, blue"myConcat("; ", "elephant", "giraffe", "lion", "cheetah");// "elephant; giraffe; lion; cheetah"myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");// "sage. basil. oregano. pepper. parsley"Definition einer Funktion, die HTML-Listen erstellt
Dieses Beispiel definiert eine Funktion, die einen String enthält, der HTML für eine Liste erstellt. Das einzige formale Argument für die Funktion ist eine Zeichenfolge, die"u" ist, wenn die Listeungeordnet (mit Punkten) sein soll oder"o", wenn die Listegeordnet (nummeriert) sein soll. Die Funktion ist wie folgt definiert:
function list(type) { let html = `<${type}l><li>`; const args = Array.prototype.slice.call(arguments, 1); html += args.join("</li><li>"); html += `</li></${type}l>`; // end list return html;}Sie können dieser Funktion eine beliebige Anzahl von Argumenten übergeben, und sie fügt jedes Argument als Listenelement zu einer Liste des angegebenen Typs hinzu. Zum Beispiel:
list("u", "One", "Two", "Three");// "<ul><li>One</li><li>Two</li><li>Three</li></ul>"Verwendung von typeof mit arguments
Dertypeof-Operator gibt'object' zurück, wenn er mitarguments verwendet wird.
console.log(typeof arguments); // 'object'Der Typ der einzelnen Argumente kann durch Indizierung vonarguments bestimmt werden:
console.log(typeof arguments[0]); // returns the type of the first argumentSpezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-arguments-exotic-objects> |