#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 отпадет
Комментариев нет:
Отправить комментарий