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


Answers

function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}

Это присваивает delete_after после значения delete_after если оно не является ложным значением, иначе оно присваивает строку "my default here" . Для более подробной информации ознакомьтесь с обзором Doug Crockford по языку и ознакомьтесь с разделом «Операторы» .

Этот подход не работает, если вы хотите передать значение false , т.е. false , null , undefined , 0 или "" . Если вам требуются значения ложности, которые нужно передать, вам нужно будет использовать метод в ответе Тома Риттера .

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

function read_file(values) {
    values = merge({ 
        delete_after : "my default here"
    }, values || {});

    // rest of code
}

// simple implementation based on $.extend() from jQuery
function merge() {
    var obj, name, copy,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length;

    for (; i < length; i++) {
        if ((obj = arguments[i]) != null) {
            for (name in obj) {
                copy = obj[name];

                if (target === copy) {
                    continue;
                }
                else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

использовать

// will use the default delete_after value
read_file({ file: "my file" }); 

// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" }); 
Question

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

def read_file(file, delete_after = false)
  # code
end

Это работает в JavaScript?

function read_file(file, delete_after = false) {
  // Code
}



это решение работает для меня в js:

function read_file(file, delete_after) {
    delete_after = delete_after || false;
    // Code
}



В ECMAScript 6 вы действительно сможете написать именно то, что у вас есть:

function read_file(file, delete_after = false) {
  // Code
}

Это установит delete_after значение false если оно не delete_after или undefined . Сегодня вы можете использовать такие функции ES6, как Transpilers, такие как Babel .

См. Статью MDN для получения дополнительной информации .




Для всех, кто заинтересован в работе с кодом в Microsoft Edge, не используйте значения по умолчанию в параметрах функции.

function read_file(file, delete_after = false) {
    #code
}

В этом примере Edge выдаст ошибку «Ожидание») »

Чтобы обойти это использование

function read_file(file, delete_after) {
  if(delete_after == undefined)
  {
    delete_after = false;
  }
  #code
}

По состоянию на 08 августа 2016 года это все еще проблема




В соответствии с синтаксисом

function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
   statements
}

вы можете определить значение по умолчанию для формальных параметров. а также проверить неопределенное значение с помощью функции typeof .




будучи разработчиком C ++ в течение длительного времени (Rookie to web development :)), когда я впервые столкнулся с этой ситуацией, я сделал назначение параметра в определении функции, как это указано в вопросе, следующим образом.

function myfunc(a,b=10)

Но будьте осторожны, что он не работает последовательно в браузерах. Для меня это работало на хроме на моем рабочем столе, но не работало на хроме на Android. Более безопасный вариант, как многие из упомянутых выше -

    function myfunc(a,b)
    {
    if (typeof(b)==='undefined') b = 10;
......
    }

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




Links