Подтвердить что ты не робот

Значение по умолчанию для параметра функции?

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

function foo() { return foo(0); };
function foo(bar) { ... };

Я просто наткнулся на экземпляр, где я это сделал, и я посмотрел на него странно в течение нескольких секунд, прежде чем понять мою логику. Я исхожу из php, где это тривиально:

function foo(bar=0) { ... }

Есть ли альтернатива javascript, о которой я не знаю?

4b9b3361

Ответ 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();
});