Значение по умолчанию для параметра функции?
Итак, я делаю это до тех пор, пока я помню, но мне интересно, действительно ли это то, что я должен делать. Вы пишете функцию, которая принимает параметр, поэтому вы ожидаете, что оно будет иметь значение, но если это не так, у вас есть веская причина по умолчанию, сказать нуль. В настоящее время я пишу вспомогательную функцию:
function foo() { return foo(0); };
function foo(bar) { ... };
Я просто наткнулся на экземпляр, где я это сделал, и я посмотрел на него странно в течение нескольких секунд, прежде чем понять мою логику. Я исхожу из php, где это тривиально:
function foo(bar=0) { ... }
Есть ли альтернатива javascript, о которой я не знаю?
Ответы
Ответ 1
Вы не можете перегружать функции в JavaScript. Вместо этого используйте инициализацию на основе объектов или проверьте значения и назначьте значение по умолчанию, если оно не указано.
В вашем примере вторая функция foo(bar)
заменит первую.
Здесь используется функция, использующая инициализацию объекта.
function foo(config) {
extend(this, config);
}
где extend
- это функция, которая объединяет объект конфигурации с текущим объектом. Он похож на метод $.extend
в jQuery или $extend
метод MooTools.
Вызвать функцию и передать ей пары ключевых значений
foo({ bar: 0 });
Другой способ инициализации - просмотреть предоставленные значения и присвоить значение по умолчанию, если значение не указано
function foo(bar) {
bar = bar || 0;
}
Это работает до тех пор, пока бар не является фальшивым значением. Поэтому foo(false)
или foo("")
будет инициализировать bar
до 0
. Для таких случаев выполните явную проверку.
function foo(bar) {
bar = (typeof bar == 'undefined' ? 0 : bar);
}
Ответ 2
В JavaScript аргумент будет undefined, если пользователь не прошел его. Вы можете использовать || оператор, чтобы установить значение аргумента, если он undefined:
function foo(bar) {
bar = bar || 0;
...
}
Ответ 3
Самый простой способ, которым я знаю, - проверить значение, а затем установить его значение по умолчанию, если значение не найдено. Я еще не сталкивался с уловом еще одного лайнера, это лучшее, что у меня есть.
Если ожидать значения строки, используйте это. По умолчанию будут активированы следующие значения: [ undefined, null, ""]
function foo(str) {
str = !!str ? str : 'bar';
...
}
Если ожидается число или логическое значение. Это позволяет 0 и false как значения. По умолчанию будет активировано [ undefined, null, {}, functions]
Удобно для создания аргументов значений, которые принимают только примитивные значения типа number, boolean и string
function foo(val) {
val= !!val == val || val*1 ? val : 10;
...
}
Если вы хотите проверить объекты, такие как {}, есть документация по этому поводу, но это не так просто.
Ответ 4
Надеюсь, это ответ немного лучше для кого-то - я закончил тем, что использовал проверку ol для undefined if(typeof functionparameter !== 'undefined')
в соответствии с:
$.fn.extend({
doThing: function(stringparameter = 'FooBar!', functionparameter){
console.log('Here is your string '+stringparameter);
// Run it if it been passed through:
if(typeof functionparameter !== 'undefined') functionparameter();
});