Ja, dies wird als Standardparameter bezeichnet
Standardfunktionsparameter ermöglichen die Initialisierung formaler Parameter mit Standardwerten, wenn kein Wert oder undefiniert übergeben wird.
Syntax:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Beschreibung:
Die Parameter der Funktionen sind standardmäßig undefiniert. In Situationen kann es jedoch hilfreich sein, einen anderen Standardwert festzulegen. Hier können Standardparameter helfen.
In der Vergangenheit bestand die allgemeine Strategie zum Festlegen von Standardeinstellungen darin, Parameterwerte im Hauptteil der Funktion zu testen und einen Wert zuzuweisen, wenn sie nicht definiert sind. Wenn im Aufruf kein Wert angegeben wird, ist sein Wert undefiniert. Sie müssten eine bedingte Prüfung festlegen, um sicherzustellen, dass der Parameter nicht undefiniert ist
Mit den Standardparametern in ES2015 ist die Überprüfung im Funktionskörper nicht mehr erforderlich. Jetzt können Sie einfach einen Standardwert in den Funktionskopf einfügen.
Beispiel für die Unterschiede:
// OLD METHOD
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
// NEW METHOD
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
Verschiedene Syntaxbeispiele:
Auffüllen undefiniert gegen andere falsche Werte:
Selbst wenn der Wert beim Aufruf explizit festgelegt wird, ist der Wert des Argumentes num der Standardwert.
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)
// test with other falsy values:
test(''); // 'string' (num is set to '')
test(null); // 'object' (num is set to null)
Zum Zeitpunkt des Anrufs ausgewertet:
Das Standardargument wird beim Aufruf ausgewertet. Im Gegensatz zu einigen anderen Sprachen wird bei jedem Aufruf der Funktion ein neues Objekt erstellt.
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
// This even applies to functions and variables
function callSomething(thing = something()) {
return thing;
}
function something() {
return 'sth';
}
callSomething(); //sth
Standardparameter stehen für spätere Standardparameter zur Verfügung:
Bereits angetroffene Parameter stehen späteren Standardparametern zur Verfügung
function singularAutoPlural(singular, plural = singular + 's',
rallyingCry = plural + ' ATTACK!!!') {
return [singular, plural, rallyingCry];
}
//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');
//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');
//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')
Im Funktionskörper definierte Funktionen:
Eingeführt in Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Im Funktionskörper deklarierte Funktionen können nicht innerhalb der Standardparameter referenziert werden und lösen einen ReferenceError aus (derzeit ein TypeError in SpiderMonkey, siehe Fehler 1022967). Standardparameter werden immer zuerst ausgeführt, Funktionsdeklarationen innerhalb des Funktionskörpers werden anschließend ausgewertet.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Parameter ohne Standardwerte nach Standardparametern:
Vor Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2) führte der folgende Code zu einem SyntaxError. Dies wurde im Fehler 777060 behoben und funktioniert wie erwartet in späteren Versionen. Die Parameter werden weiterhin von links nach rechts festgelegt, wodurch Standardparameter überschrieben werden, auch wenn spätere Parameter ohne Standardwerte vorhanden sind.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Zerstörter Parameter mit Standardwertzuweisung:
Sie können die Standardwertzuweisung mit der Notation der Destrukturierungszuweisung verwenden
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6
function defaultFor(arg, val) { return typeof arg !== 'undefined' ? arg : val; }
und dann können Sie es alsa = defaultFor(a, 42);