Так, це називається параметром за замовчуванням
Параметри функції за замовчуванням дозволяють ініціалізувати формальні параметри зі значеннями за замовчуванням, якщо не передано значення або невизначено.
Синтаксис:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Опис:
Параметри функцій за замовчуванням до невизначених. Однак у ситуаціях може бути корисно встановити інше значення за замовчуванням. Тут можуть допомогти параметри за замовчуванням.
Раніше загальною стратегією встановлення значень за замовчуванням було тестування значень параметрів у тілі функції та призначення значення, якщо вони не визначені. Якщо в виклику не вказане значення, його значення буде невизначеним. Вам доведеться встановити умовну перевірку, щоб переконатися, що параметр не визначений
Якщо параметри за замовчуванням в ES2015, перевірка в тілі функції більше не потрібна. Тепер ви можете просто поставити значення за замовчуванням у функціональній головці.
Приклад відмінностей:
// 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
Різні приклади синтаксису:
Невизначений пробіл проти інших фальшивих значень:
Навіть якщо при виклику значення встановлюється явно, значення аргументу num є типовим.
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)
Оцінюється під час дзвінка:
Аргумент за замовчуванням оцінюється під час виклику, тому, на відміну від деяких інших мов, кожен об'єкт створюється кожен раз при виклику функції.
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
Параметри за замовчуванням доступні для пізніших параметрів за замовчуванням:
Параметри, які вже зустрічалися, доступні для пізніших параметрів за замовчуванням
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.')
Функції, визначені всередині функції функції:
Представлено у Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Функції, задекларовані в тілі функції, не можуть бути передані всередині параметрів за замовчуванням та передавати ReferenceError (на даний момент TypeError у SpiderMonkey, див. Помилку 1022967). Параметри за замовчуванням завжди виконуються спочатку, декларації функцій всередині функції функції оцінюються потім.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Параметри без значень за замовчуванням після параметрів за замовчуванням:
До Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2) наступний код призвів до SyntaxError. Це було виправлено у помилці 777060 і працює, як очікувалося, у пізніших версіях. Параметри все ще встановлюються зліва направо, перезаписуючи параметри за замовчуванням, навіть якщо є пізніші параметри без значень за замовчуванням.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Деструктурований параметр із призначенням значення за замовчуванням:
Ви можете використовувати присвоєння значення за замовчуванням з позначенням присвоєння руйнування
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; }
і тоді ви можете назвати його якa = defaultFor(a, 42);