Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Experiment: Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.

Rest-Parameter

BaselineWidely available

DieRest-Parameter-Syntax ermöglicht es einer Funktion, eine unbestimmte Anzahl an Argumenten als Array zu akzeptieren und bietet damit eine Möglichkeit,variadische Funktionen in JavaScript darzustellen.

Probieren Sie es aus

function sum(...theArgs) {  let total = 0;  for (const arg of theArgs) {    total += arg;  }  return total;}console.log(sum(1, 2, 3));// Expected output: 6console.log(sum(1, 2, 3, 4));// Expected output: 10

Syntax

js
function f(a, b, ...theArgs) {  // …}

Es gibt einige zusätzliche Syntaxbeschränkungen:

  • Eine Funktionsdefinition kann nur einen Rest-Parameter haben.
  • Der Rest-Parameter muss der letzte Parameter in der Funktionsdefinition sein.
  • Abschließende Kommas sind nach dem Rest-Parameter nicht erlaubt.
  • Der Rest-Parameter kann keinenStandardwert besitzen.

Beschreibung

Der letzte Parameter einer Funktionsdefinition kann mit... (drei U+002E FULL STOP Zeichen) vorangestellt werden, wodurch alle verbleibenden (vom Benutzer angegebenen) Parameter innerhalb einesArray-Objekts platziert werden.

js
function myFun(a, b, ...manyMoreArgs) {  console.log("a", a);  console.log("b", b);  console.log("manyMoreArgs", manyMoreArgs);}myFun("one", "two", "three", "four", "five", "six");// Console Output:// a, one// b, two// manyMoreArgs, ["three", "four", "five", "six"]

Der Rest-Parameter kanndestrukturiert werden, was es Ihnen ermöglicht, bestimmte Parameterpositionen zu ignorieren.

js
function ignoreFirst(...[, b, c]) {  return b + c;}

Allerdings sind die folgenden alle Syntaxfehler:

js
function wrong1(...one, ...wrong) {}function wrong2(...wrong, arg2, arg3) {}function wrong3(...wrong,) {}function wrong4(...wrong = []) {}

Der Rest-Parameter wird nicht zurlength-Eigenschaft der Funktion gezählt.

Der Unterschied zwischen Rest-Parametern und dem arguments-Objekt

Es gibt vier Hauptunterschiede zwischen Rest-Parametern und demarguments Objekt:

  • Dasarguments-Objekt istkein echtes Array, während Rest-ParameterArray-Instanzen sind, was bedeutet, dass Methoden wiesort(),map(),forEach() oderpop() direkt darauf angewendet werden können.
  • Dasarguments-Objekt hat die zusätzliche (veraltete)callee-Eigenschaft.
  • In einer nicht-strikten Funktion mit einfachen Parameternsynchronisiert dasarguments-Objekt seine Indizes mit den Werten der Parameter. Das Rest-Parameter-Array aktualisiert seinen Wert nie, wenn die benannten Parameter neu zugewiesen werden.
  • Der Rest-Parameter bündelt alle zusätzlichen Parameter in einem einzelnen Array, enthält jedoch keine benannten Argumente, die vor dem...restParam definiert sind. Dasarguments-Objekt enthält alle Parameter — einschließlich der Parameter im...restParam Array — gebündelt in einem array-ähnlichen Objekt.

Beispiele

Verwendung von Rest-Parametern

In diesem Beispiel wird das erste Argumenta zugeordnet und das zweiteb, sodass diese benannten Argumente normal verwendet werden.

Das dritte Argument,manyMoreArgs, wird jedoch ein Array sein, das das dritte, vierte, fünfte, sechste, …, n-te — so viele Argumente, wie der Benutzer angibt — enthält.

js
function myFun(a, b, ...manyMoreArgs) {  console.log("a", a);  console.log("b", b);  console.log("manyMoreArgs", manyMoreArgs);}myFun("one", "two", "three", "four", "five", "six");// a, "one"// b, "two"// manyMoreArgs, ["three", "four", "five", "six"] <-- an array

Unten, auch wenn es nur einen Wert gibt, wird das letzte Argument immer noch in ein Array gesetzt.

js
// Using the same function definition from example abovemyFun("one", "two", "three");// a, "one"// b, "two"// manyMoreArgs, ["three"] <-- an array with just one value

Unten wird das dritte Argument nicht bereitgestellt, abermanyMoreArgs ist dennoch ein Array (wenn auch ein leeres).

js
// Using the same function definition from example abovemyFun("one", "two");// a, "one"// b, "two"// manyMoreArgs, [] <-- still an array

Unten wird nur ein Argument bereitgestellt, sodassb den Standardwertundefined erhält, abermanyMoreArgs ist dennoch ein leeres Array.

js
// Using the same function definition from example abovemyFun("one");// a, "one"// b, undefined// manyMoreArgs, [] <-- still an array

Argumentlänge

DatheArgs ein Array ist, wird die Anzahl seiner Elemente durch dielength-Eigenschaft angegeben. Wenn der einzige Parameter der Funktion ein Rest-Parameter ist, wirdrestParams.length gleicharguments.length sein.

js
function fun1(...theArgs) {  console.log(theArgs.length);}fun1(); // 0fun1(5); // 1fun1(5, 6, 7); // 3

Verwendung von Rest-Parametern in Kombination mit normalen Parametern

Im nächsten Beispiel wird ein Rest-Parameter verwendet, um alle Parameter nach dem ersten Parameter in ein Array zu sammeln. Jeder der in das Array gesammelten Parameterwerte wird dann mit dem ersten Parameter multipliziert und das Array wird zurückgegeben:

js
function multiply(multiplier, ...theArgs) {  return theArgs.map((element) => multiplier * element);}const arr = multiply(2, 15, 25, 42);console.log(arr); // [30, 50, 84]

Von arguments zu einem Array

Array-Methoden können bei Rest-Parametern verwendet werden, nicht jedoch beimarguments-Objekt:

js
function sortRestArgs(...theArgs) {  const sortedArgs = theArgs.sort();  return sortedArgs;}console.log(sortRestArgs(5, 3, 7, 1)); // 1, 3, 5, 7function sortArguments() {  const sortedArgs = arguments.sort();  return sortedArgs; // this will never happen}console.log(sortArguments(5, 3, 7, 1));// throws a TypeError (arguments.sort is not a function)

Rest-Parameter wurden eingeführt, um den Boilerplate-Code zu reduzieren, der häufig zum Umwandeln einer Menge von Argumenten in ein Array verwendet wurde.

Vor den Rest-Parametern musstenarguments in ein normales Array umgewandelt werden, bevor Array-Methoden darauf aufgerufen wurden:

js
function fn(a, b) {  const normalArray = Array.prototype.slice.call(arguments);  // — or —  const normalArray2 = [].slice.call(arguments);  // — or —  const normalArrayFrom = Array.from(arguments);  const first = normalArray.shift(); // OK, gives the first argument  const firstBad = arguments.shift(); // ERROR (arguments is not a normal array)}

Jetzt können Sie leicht Zugriff auf ein normales Array mit einem Rest-Parameter erhalten:

js
function fn(...args) {  const normalArray = args;  const first = normalArray.shift(); // OK, gives the first argument}

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-function-definitions

Browser-Kompatibilität

Siehe auch

MDN-Feedback-Box

Diese Seite wurde automatisch aus dem Englischen übersetzt.


[8]ページ先頭

©2009-2025 Movatter.jp