За последние несколько лет в большинство сред JavaScript были добавлены параметры по умолчанию. Они предоставляют значения для параметров функции, когда значение не отправляется или отправляется как undefined. Например:

function printName(name = '(none sent)') {
    console.info(`Hello ${name}!`);
}
printName('Bob');
// Hello Bob!
printName();
// Hello (none sent)!
printName(undefined);
// Hello (none sent)!

Это очень полезно для большинства случаев, но важно помнить, что это не эквивалентно предыдущим стратегиям по умолчанию, которые обычно использовались до того, как это было поддержано. Большинство из них пытались обработать множество крайних случаев, в том числе когда параметр является неожиданным типом. Например:

function checkDefaultValue(quantity) {
    quantity = typeof quantity === 'number' ? quantity : 0;
    console.log(quantity);
}

checkDefaultValue();//          0
checkDefaultValue(undefined);// 0
checkDefaultValue(null);//      0
checkDefaultValue({});//        0
checkDefaultValue('');//        0
checkDefaultValue(0);//         0
checkDefaultValue(1);//         1
checkDefaultValue(-1);//       -1

Другими словами, если не число, конвертируйте в 0, иначе просто распечатайте число. Теперь посмотрим, что произойдет, если это будет напрямую преобразовано в использование параметра по умолчанию в нескольких крайних случаях:

function checkDefaultValue(quantity = 0) {
    console.log(quantity);
}
checkDefaultValue();//          0
checkDefaultValue(undefined);// 0
checkDefaultValue(null);//      null
checkDefaultValue({});//        {}
checkDefaultValue('');//        (empty string, nothing is displayed)
checkDefaultValue(0);//         0
checkDefaultValue(1);//         1
checkDefaultValue(-1);//       -1

Как видите, некоторые входные данные работают должным образом, а некоторые - нет. Это не ошибка, поскольку определение параметров по умолчанию очень узкое, чтобы быть последовательным и понятным (в отличие от некоторых старых функций JS):

  1. Если значение не было указано вообще, используйте значение по умолчанию
  2. Если это значение было указано, но undefined рассматривает его как не указанное
  3. Во всех остальных случаях используйте переданное значение точно так, как было отправлено.

Другими словами, параметры по умолчанию очень полезны, но вы должны точно понимать, для чего они используются. Простое переключение старого кода со значениями по умолчанию может привести к изменению поведения в крайних случаях и нарушению кода, как показано выше.