Sì, questo è indicato come parametro predefinito
I parametri di funzione predefiniti consentono di inizializzare i parametri formali con valori predefiniti se non viene passato alcun valore o non definito.
Sintassi:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Descrizione:
Parametri delle funzioni predefiniti su indefiniti Tuttavia, in situazioni potrebbe essere utile impostare un valore predefinito diverso. È qui che possono aiutare i parametri predefiniti.
In passato, la strategia generale per impostare i valori predefiniti era testare i valori dei parametri nel corpo della funzione e assegnare un valore se non definito. Se nella chiamata non viene fornito alcun valore, il suo valore sarebbe indefinito. Dovresti impostare un controllo condizionale per assicurarti che il parametro non sia indefinito
Con i parametri predefiniti in ES2015, il controllo nel corpo della funzione non è più necessario. Ora puoi semplicemente inserire un valore predefinito nell'intestazione della funzione.
Esempio delle differenze:
// 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
Diversi esempi di sintassi:
Riempimento non definito rispetto ad altri valori di falsità:
Anche se il valore viene impostato esplicitamente durante la chiamata, il valore dell'argomento num è quello predefinito.
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)
Valutato al momento della chiamata:
L'argomento predefinito viene valutato al momento della chiamata, quindi a differenza di altre lingue, un nuovo oggetto viene creato ogni volta che viene chiamata la funzione.
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
I parametri predefiniti sono disponibili per i parametri predefiniti successivi:
I parametri già rilevati sono disponibili per i parametri predefiniti successivi
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.')
Funzioni definite all'interno del corpo della funzione:
Introdotto in Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Le funzioni dichiarate nel corpo della funzione non possono essere riferite all'interno dei parametri predefiniti e generare un ReferenceError (attualmente un TypeError in SpiderMonkey, vedere il bug 1022967). I parametri predefiniti vengono sempre eseguiti per primi, le dichiarazioni di funzione all'interno del corpo della funzione vengono valutate in seguito.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Parametri senza valori predefiniti dopo i parametri predefiniti:
Prima di Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2), il codice seguente generava un SyntaxError. Questo problema è stato risolto nel bug 777060 e funziona come previsto nelle versioni successive. I parametri vengono comunque impostati da sinistra a destra, sovrascrivendo i parametri predefiniti anche se ci sono parametri successivi senza valori predefiniti.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Parametro destrutturato con assegnazione di valore predefinita:
È possibile utilizzare l'assegnazione di valori predefiniti con la notazione di assegnazione destrutturante
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; }
e quindi puoi chiamarlo comea = defaultFor(a, 42);