добавление значений по умолчанию в пользовательской функции JavaScript - PullRequest
4 голосов
/ 28 января 2011

mmorning, я php человек, поэтому я не могу понять, почему это вызывает ошибку:

function display_message( bool, msg, remove_wrap = false ) {
    if( bool === true ) {
        error = get_msg( msg, remove_wrap );
    }else{
        error = get_error_msg( msg, remove_wrap );
    }
    $.fancybox( error, { 'autoDimensions' : false, 'width' : 450, 'height' : 'auto', 'transitionIn' : 'none', 'transitionOut' : 'none' });
}

виновником является 'remove_wrap = false' из функции.

Может кто-нибудь сказать мне, что я должен написать здесь. С уважением, Фил

Ответы [ 7 ]

4 голосов
/ 28 января 2011

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

arg = arg || default;

Итак, в вашем случае это будет:

remove_wrap = remove_wrap || false;

Однако, если ваше значение по умолчанию false, вы недаже не нужно его устанавливать.Потому что, когда этот аргумент отсутствует, его значение будет иметь тип undefined внутри функции, и это значение уже "ложное": вы можете напрямую использовать remove_wrap как есть:

function display_message(bool, msg, remove_wrap) {
    var error = bool
        ? get_msg(msg, remove_wrap)
        : get_error_msg(msg, remove_wrap);

    $.fancybox(error, {
        autoDimensions: false,
        width: 450,
        height: "auto",
        transitionIn: "none",
        transitionOut: "none"
    });
}

Бонус: Обратите внимание, что я также добавил var к переменной error (не опускайте var, если вы не намерены создавать глобальную переменную).Я также сократил назначение с помощью троичного выражения.Я также переформатировал вызов fancybox с помощью синтаксиса, который большинство людей находят более читабельным.

3 голосов
/ 28 января 2011

Поскольку вы человек PHP, это может пригодиться.Исходя из самого JS, я на самом деле испортил пару раз, предполагая, что это было на языке:

function (some_var) {
    some_var = some_var || 'default';
}

В PHP оператор "или" вернет "true", если первое или второе значенияtrue, в противном случае - false.

Но в JavaScript оператор "or" фактически возвращает само первое значение , если это правда. Возвращает false только в том случае, если оба значения ложны. Если оба значения ложны, то возвращается второе значение. Это означает, что приведенное выше является очень эффективным способом присвоения значений по умолчанию.

Мои самые искренние извинения, если это все было старым знанием.Я просто хотел бы, чтобы кто-то прошел через меня , когда я переключал языки.

2 голосов
/ 28 января 2011
function display_message( bool, msg, remove_wrap ) {
    remove_wrap = remove_wrap === true;
    if( bool === true ) {
        error = get_msg( msg, remove_wrap );
    }else{
        error = get_error_msg( msg, remove_wrap );
    }
    $.fancybox( error, { 'autoDimensions' : false, 'width' : 450, 'height' : 'auto', 'transitionIn' : 'none', 'transitionOut' : 'none' });
}
1 голос
/ 28 января 2011

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

function display_message( bool, msg, remove_wrap ) {
  remove_wrap = remove_wrap || false;
  // rest of code
}

Таким образом, если определено remove_wrap, оно останется равным самому себе, но если оно не определено, будет установлено значение false.

1 голос
/ 28 января 2011

1001 * попробовать *

function display_message( bool, msg, remove_wrap) {
  if(remove_wrap === undefined) {
    var remove_wrap = false;
  }
...
1 голос
/ 28 января 2011

Вы можете обрабатывать значения по умолчанию, как это:

function display_message(bool, msg, remove_wrap) {
    if (remove_wrap == null) remove_wrap = false;
    // rest of your code...

}

Значение по умолчанию будет применяться, если функция вызывается с помощью:

display_message(some_bool, some_msg);
// Or,
display_message(some_bool, some_msg, null);

Сравнение с null удобно, потому что позволяет вызывающему абоненту запрашивать значение по умолчанию, но не склонно к переопределению 0 или '' (пустая строка), как при простом ложном сравнении. 1010 *

1 голос
/ 28 января 2011

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

Например:

function display_message( bool, msg, remove_wrap ) { 
    if(undefined === remove_wrap) 
        remove_wrap = false;

    //Rest of function
}

Вызовите эту функцию следующим образом: display_message(true, "my msg");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...