Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Параметры функции по умолчанию

#javascript


В стандарте ES-2015 появилась возможность задавать параметры функции по умолчанию,
выглядит это так:     

function name(name = 'noname') {
  console.log(name);
}
name()


Однако такого же эффекта можно было добиться с помощью хака: 

function name(name) {
  var name = name || 'noname'
  console.log(name);
}
name()


При этом Babel транслирует такую функцию вот так: 

function name() {
  var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] :
'noname';
  console.log(name);
}
name();


Какой вариант правильнее: как предлагает Babel или с использованием логического ||?
    


Ответы

Ответ 1



Правильнее как бабель, разумеется. Потому что например: > "" || "default" -> "default" и если вы захотите в свою функцию передать пустую строку, то поведение её будет слегка неожиданным.

Ответ 2



Логическое ИЛИ подчиняется законам логики. В общем случае такое поведение не подходит. Babel транспилирует не зная ничего о Вашей бизнес логике. Например, является ли пустая строка валидным значением или её нужно заменить значением по умолчанию? А 0? let tests = [undefined, null, 0, '', false, NaN]; const test1 = (a = 42) => a; const test2 = (a) => (a=a||42, a); console.log(tests.map(test1)); console.log(tests.map(test2));

Ответ 3



правильнее писать не опираясь на babel так как как говорилось выше babel ничего не знает о вашей логике и самое главное это babel всего лишь обертка которая в будущем станет не нужна (в идеале) и когда стандарт ES-2015 станет стандартом дефакто то и надобность в babel отпадет

Комментариев нет:

Отправить комментарий