Das arguments-Objekt ist ein Array ähnliches Objekt, das auf die übergebenen Parameter einer Funktion verweist.

Syntax

arguments

Beschreibung

Das arguments-Objekt ist eine lokal verfügbare Variable in allen (Nicht-Pfeil-) Funktion. Man kann auf die Parameter einer Funktion referenzieren, wenn man in einer Funktion das arguments-Objekt benutzt. Dieses Objekt enthält einen Eintrag für jeden übergebenen Parameter der Funktion. Der erste Eintrag beginnt beim Index 0. Wenn einer Funktion drei Parameter übergeben werden, kann wie folgt auf diese zugegriffen werden;

arguments[0]
arguments[1]
arguments[2]

Die Parameter können auch überschrieben werden:

arguments[1] = 'new value';

Das arguments-Objekt ist kein Array. Es ist ähnlich wie ein Array, hat aber keine Eigenschaften eines Arrays mit Ausnahme von length. Zum Beispiel ist die pop-Methode nicht vorhanden. Jedoch kann arguments zu einem echten Array konvertiert werden:

var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);

// ES2015
const args = Array.from(arguments);

Der Einsatz von slice auf arguments kann Optimierungen bei einigen JavaScript-Engines (z. B. bei V8 — mehr Informationen) verhindert. Wenn man sich darum kümmert, sollte ein neues Array erstellt werden, indem über das arguments-Objekt iteriert wird. Eine Alternative ist der Einsatz von Array.apply wie folgt:

var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));)

Man kann das arguments-Objekt nutzen, um eine Funktion mit mehr übergebenen Parametern, als die der forlmalen Definition, zu verarbeiten. Diese Technik ist hilfreich für Funktionen mit variabler Parameteranzahl. Man kann arguments.length nutzen, um die Anzahl der übergebenen Parameter festzustellen und dann jeden Parameter über das arguments-Objekt zu verarbeiten. (Um die Anzahl der deklarierten Parameter festzustellen, kann die Funktion.length Eigenschaft genutzt werden.)

Einsatz von typeof bei arguments

Der Typ von arguments ist 'object'

console.log(typeof arguments); // 'object'

Der Typ von individuellen Argumenten kann über den Index ermittelt werden.

console.log(typeof arguments[0]); // Gibt den Typ des individuellen Arguments zurück

Einsatz der Spread Syntax mit arguments

Man kann die Array.from() Methode oder den spread operator nutzen, um arguments zu einem echten Array zu konvertieren:

var args = Array.from(arguments);
var args = [...arguments];

Eigenschaften

arguments.callee
Referenz zur aktuell ausgeführten Funktion.
arguments.caller
Referenz zur Funktion, die die aktuelle Funktion ausführt hat.
arguments.length
Anzahl der übergebenen Funktionsparameter.
arguments[@@iterator]
Gibt ein Array-Iterator-Objekt zurück, welches die Werte an allen Indizes von arguments enthält.

Beispiele

Definition einer Funktion, die mehrere Strings konkateniert

Dieses Beispiel definiert eine Funktion, die mehrere Strings konkateniert. Der einzige formale Parameter der Funktion ist ein String, der die Zeichen enthält, die die einzelnen Elemente trennt. Die Funktion ist wie folgt definiert:

function myConcat(separator) {
  var args = Array.prototype.slice.call(arguments, 1);
  return args.join(separator);
}

Man kann eine beliebige Anzahl von Parametern der Funktion übergeben und es wird jedes Argument für den String eingesetzt.

// returns "red, orange, blue"
myConcat(", ", "red", "orange", "blue");

// returns "elephant; giraffe; lion; cheetah"
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");

// returns "sage. basil. oregano. pepper. parsley"
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");

Definition einer Funktion, die HTML-Listen erstellt

Im Beispiel wird eine Funktion definiert, die einen String mit HTML für eine Liste zurückgibt. Der einzige formale Parameter der Funktion ist ein String, der "u" für eine ungeordnete Liste oder "o" für eine geordnete Liste enthält. Die Funktion ist wie folgt definiert:

function list(type) {
  var result = "<" + type + "l><li>";
  var args = Array.prototype.slice.call(arguments, 1);
  result += args.join("</li><li>");
  result += "</li></" + type + "l>"; // end list

  return result;
}

Der Funktion kann eine variable Anzahl an Parametern übergeben werden und es wird jeder Parameter als eintrag einer in der Liste hinzugefügt. Zum Beispiel:

var listHTML = list("u", "One", "Two", "Three");

/* listHTML is:

"<ul><li>One</li><li>Two</li><li>Three</li></ul>"

*/

Rest, default und Destrukturierende Parameter

Das arguments-Objekt kann in Verbindung mit rest, default, und destrukturierenden Parameters eingesetzt werden.

function foo (...args) {
  return args;
}
foo(1, 2, 3); // [1,2,3]

Wenn der Einsatz von rest, default, und destrukturierenden Parametern nicht die die Eigenschaften des arguments Objekts verändert, gibt es eine Unterschied zwischen dem strict mode und dem nicht strict mode.

Wenn eine nicht strikte (non-strict) Funktion nicht  rest, default, oder destrukturierenden Parametern enthält, refernezieren die Werte des arguments Objektes direkt auf die deklarierten Parameter und umgekehrt. Siehe dazu folgenden Quelltext:

function func (a) {
  arguments[0] = 99; // Aktualisert auch arguments[0] und a
  console.log(a);
}
func(10); // 99

und

function func (a) {
  a = 99; // Aktualisert auch arguments[0] und a
  console.log(arguments[0]);
}
func(10); // 99

Wenn eine nicht strikte (non-strict) Funktion rest, default, oder destrukturierenden Parametern enthält, refernezieren die Werte des arguments Objektes nicht direkt auf die deklarierten Parameter und umgekehrt. Die Werte in arguments sind die Werte, die der Funktion beim Aufruf übergeben werden:

function func(a = 55) {
  arguments[0] = 99; // aktualisert arguments[0] aber nicht a
  console.log(a);
}
func(10); // 10

und

function func(a = 55) {
  a = 99; // aktualisert a aber nicht arguments[0]
  console.log(arguments[0]);
}
func(10); // 10;

und

function func(a = 55) {
  console.log(arguments[0]);
}
func(); // undefined;

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1st Edition (ECMA-262) Standard Initiale Definition. Implementiert in JavaScript 1.1
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Arguments Object' in dieser Spezifikation.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Arguments Exotic Objects' in dieser Spezifikation.
Standard  
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Arguments Exotic Objects' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidEdge MobileFirefox für AndroidOpera für AndroidiOS SafariSamsung InternetNode.js
Grundlegende UnterstützungChrome Vollständige Unterstützung JaEdge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung JaOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
calleeChrome Vollständige Unterstützung JaEdge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung 6Opera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
caller
VeraltetNicht standardisiert
Chrome Keine Unterstützung NeinEdge Keine Unterstützung NeinFirefox Keine Unterstützung NeinIE Keine Unterstützung ? — 9Opera Keine Unterstützung NeinSafari Keine Unterstützung NeinWebView Android Keine Unterstützung NeinChrome Android Keine Unterstützung NeinEdge Mobile Keine Unterstützung NeinFirefox Android Keine Unterstützung NeinOpera Android Keine Unterstützung NeinSafari iOS Keine Unterstützung NeinSamsung Internet Android Keine Unterstützung Neinnodejs Keine Unterstützung Nein
lengthChrome Vollständige Unterstützung JaEdge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung JaOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
@@iteratorChrome Vollständige Unterstützung 52Edge ? Firefox Vollständige Unterstützung 46IE Keine Unterstützung NeinOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung 9WebView Android Vollständige Unterstützung 52Chrome Android Vollständige Unterstützung 52Edge Mobile ? Firefox Android Vollständige Unterstützung 46Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung 9Samsung Internet Android Vollständige Unterstützung 6.0nodejs Vollständige Unterstützung Ja

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Keine Unterstützung  
Keine Unterstützung
Kompatibilität unbekannt  
Kompatibilität unbekannt
Nicht standardisiert. Erwarte schlechte browserübergreifende Unterstützung.
Nicht standardisiert. Erwarte schlechte browserübergreifende Unterstützung.
Veraltet. Nicht für den Einsatz in neuen Webseiten gedacht.
Veraltet. Nicht für den Einsatz in neuen Webseiten gedacht.

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Mitwirkende an dieser Seite: schlagi123, niorad, a-ctor, fscholz
Zuletzt aktualisiert von: schlagi123,