Oui, c'est ce qu'on appelle un paramètre par défaut
Les paramètres de fonction par défaut permettent aux paramètres formels d'être initialisés avec des valeurs par défaut si aucune valeur ou indéfinie n'est transmise.
Syntaxe:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
La description:
Par défaut, les paramètres des fonctions ne sont pas définis. Cependant, dans certaines situations, il peut être utile de définir une valeur par défaut différente. C'est là que les paramètres par défaut peuvent aider.
Dans le passé, la stratégie générale de définition des valeurs par défaut consistait à tester les valeurs des paramètres dans le corps de la fonction et à attribuer une valeur si elles n'étaient pas définies. Si aucune valeur n'est fournie dans l'appel, sa valeur serait indéfinie. Vous devez définir une vérification conditionnelle pour vous assurer que le paramètre n'est pas indéfini
Avec les paramètres par défaut dans ES2015, la vérification dans le corps de la fonction n'est plus nécessaire. Maintenant, vous pouvez simplement mettre une valeur par défaut dans la tête de fonction.
Exemple des différences:
// 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
Différents exemples de syntaxe:
Remplissage indéfini par rapport aux autres valeurs de fausseté:
Même si la valeur est définie explicitement lors de l'appel, la valeur de l'argument num est celle par défaut.
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)
Évalué au moment de l'appel:
L'argument par défaut est évalué au moment de l'appel, donc contrairement à d'autres langages, un nouvel objet est créé à chaque appel de la fonction.
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
Les paramètres par défaut sont disponibles pour les paramètres par défaut ultérieurs:
Les paramètres déjà rencontrés sont disponibles pour les paramètres par défaut ultérieurs
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.')
Fonctions définies à l'intérieur du corps de fonction:
Introduit dans Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Les fonctions déclarées dans le corps de la fonction ne peuvent pas être référencées dans les paramètres par défaut et lèvent une ReferenceError (actuellement une TypeError dans SpiderMonkey, voir bug 1022967). Les paramètres par défaut sont toujours exécutés en premier, les déclarations de fonction à l'intérieur du corps de la fonction sont évaluées ensuite.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Paramètres sans valeurs par défaut après les paramètres par défaut:
Avant Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2), le code suivant entraînait une SyntaxError. Cela a été corrigé dans le bogue 777060 et fonctionne comme prévu dans les versions ultérieures. Les paramètres sont toujours définis de gauche à droite, remplaçant les paramètres par défaut même s'il existe des paramètres ultérieurs sans valeurs par défaut.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Paramètre déstructuré avec affectation de valeur par défaut:
Vous pouvez utiliser l'affectation de valeur par défaut avec la notation d'affectation destructurante
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; }
puis vous pouvez l'appeler commea = defaultFor(a, 42);