Параметри за умовчанням
Що це таке
Параметри за умовчанням дозволяють задати значення параметру функції прямо в її визначенні, яке буде використано, якщо під час виклику цього аргументу немає або він дорівнює
undefined.
Приклад без параметрів за умовчанням
function greet(name) {
console.log(`Привіт, ${name}!`);
}
greet("Alice"); // Привіт, Alice!
greet(); // Привіт, undefined!Якщо аргумент не передано, name дорівнює undefined.
Приклад з параметром за умовчанням
function greet(name = "гість") {
console.log(`Привіт, ${name}!`);
}
greet("Alice"); // Привіт, Alice!
greet(); // Привіт, гість!Тепер, якщо аргумент не передано,
функція бере значення за умовчанням "гість".
Як це працює
Параметр за умовчанням спрацьовує, якщо аргумент:
- не переданий взагалі, або
- явно дорівнює
undefined
function test(a = 10) {
console.log(a);
}
test(); // 10 (немає аргументу)
test(undefined); // 10 (явно undefined)
test(null); // null (не undefined!)Можна використовувати вирази та функції
Значення за умовчанням не обов'язково має бути константою, це може бути будь-який вираз, навіть виклик іншої функції.
function getRandom() {
return Math.floor(Math.random() * 10);
}
function printNumber(n = getRandom()) {
console.log(n);
}
printNumber(); // випадкове число від 0 до 9
printNumber(7); // 7Порядок і комбінування
Параметри за умовчанням можна задавати у будь-якому порядку, але найчастіше - у кінці списку аргументів.
function info(name, age = 18, city = "Kyiv") {
console.log(`${name}, ${age} років, з ${city}`);
}
info("Alice"); // Alice, 18 років, з Kyiv
info("Bob", 25, "Lviv"); // Bob, 25 років, з LvivЯкщо пропустити значення не в кінці - потрібно явно передати undefined:
info("Oleh", undefined, "Warsaw");
// Oleh, 18 років, з WarsawМожна використовувати інші параметри як значення за умовчанням
function sum(a, b = a) {
return a + b;
}
console.log(sum(5)); // 10
console.log(sum(5, 2)); // 7Відмінність від старого способу (до ES6)
Раніше програмісти писали "емуляцію" через ||:
function greet(name) {
name = name || "гість";
console.log(`Привіт, ${name}!`);
}Але це мало недолік:
greet(""); // Привіт, гість! - хоча рядок порожній, а не undefinedПараметри за умовчанням кращі, тому що вони спрацьовують лише при undefined,
а не при "хибних" значеннях на кшталт 0, "" або false.
Коротко запам'ятати
| Властивість | Опис |
|---|---|
| Коли спрацьовує | Якщо аргумент не передано або він дорівнює undefined |
| Тип значення | Будь-який вираз, число, рядок, функція тощо |
| Можна посилатися на попередні параметри | Так |
| Працює у стрілкових функціях | Так |
Не замінює null, 0, '' | Ні, вони вважаються переданими значеннями |
Приклад для запам'ятовування
function connect(host = "localhost", port = 3000) {
console.log(`Підключення до ${host}:${port}`);
}
connect(); // localhost:3000
connect("api.example.com"); // api.example.com:3000
connect("api.example.com", 8080); // api.example.com:8080Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.