Der Rest-Operator in JavaScript
Diese Lektion beginnen wir mit einer Erklärung.
In allen vorherigen Lektionen dieses Abschnitts habe ich
nicht die ganze Wahrheit über den Operator ... erzählt.
Tatsächlich kann dieser Operator, abhängig von seiner Position im Code, entweder Spread-Operator oder Rest-Operator genannt werden.
Wie Sie bereits wissen, wenn der Spread-Operator
vor einem Array oder String steht, teilt er sie
in einzelne Werte auf. Der Rest-Operator,
obwohl er die gleiche Syntax in Form von ... hat,
ist für etwas anderes bestimmt.
Jetzt werden wir uns ansehen, wofür. Nehmen wir an, wir haben eine Funktion, die zwei Parameter akzeptiert:
function func(a, b) {
console.log(a);
console.log(b);
}
Sie sollten bereits wissen, dass es nicht zu einem Fehler führt, wenn der Funktion zusätzliche Parameter übergeben werden:
func(1, 2, 3, 4, 5);
Der rest-Operator ermöglicht es, alle
überschüssigen Parameter in Form eines Arrays zu erhalten. Dafür
wird der Funktion ein weiterer Parameter hinzugefügt (unbedingt
als letztes), vor dem 3 Punkte geschrieben werden:
function func(a, b, ...rest) {
}
Diese drei Punkte sind der Rest-Operator, und der Name
der Variable kann beliebig sein, aber
normalerweise wird er ebenfalls rest genannt.
Rufen wir unsere Funktion mit einer übermäßigen
Anzahl von Parametern auf und sehen wir, was in die
Parameter a und b gelangt, und was -
in den Rest rest:
func(1, 2, 3, 4, 5);
function func(a, b, ...rest) {
console.log(a); // gibt 1 aus
console.log(b); // gibt 2 aus
console.log(rest); // gibt [3, 4, 5] aus
}
Wenn es keine zusätzlichen Parameter gibt, wird in die Variable
rest ein leeres Array geschrieben:
func(1, 2);
function func(a, b, ...rest) {
console.log(a); // gibt 1 aus
console.log(b); // gibt 2 aus
console.log(rest); // gibt []
}
Die Funktion kann überhaupt keine Parameter haben,
aber dennoch kann rest hinzugefügt werden.
In diesem Fall kann die Funktion
mit beliebig vielen Parametern aufgerufen werden, und alle
werden in das Array rest gelangen:
function func(...rest) {
console.log(rest);
}