為JavaScript函數設置默認參數值


Answers

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

如果delete_after的值不是falsey值,則它將delete_after的值賦給delete_after ,否則將賦予字符串"my default here" 。 有關更多詳細信息,請查看Doug Crockford對語言的調查,並查看有關運營商的部分

如果您想傳遞falsey值,即falsenullundefined0"" ,則此方法不起作用。 如果你需要傳入錯誤的值,你需要在Tom Ritter的答案中使用該方法。

在處理函數的許多參數時,允許使用者傳遞對像中的參數參數,然後這些值與包含函數的默認值的對象合併在一起通常很有用

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
}



根據語法

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

您可以定義形式參數的默認值。 並使用typeof函數檢查未定義的值。




該解決方案在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不存在或undefined它將設置為false 。 您今天可以使用諸如Babel這樣的轉換器來使用ES6功能。

有關更多信息,請參閱MDN文章




對於有興趣在Microsoft Edge中有代碼工作的任何人,請勿在函數參數中使用默認值。

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

在那個例子中,Edge會拋出一個錯誤“Expectcting”)'“

繞過這個用途

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

截至2016年8月8日,這仍然是一個問題




作為一個很長時間的C ++開發人員(Rookie to web development :)),當我第一次遇到這種情況時,我在函數定義中做了參數賦值,就像在問題中提到的那樣,如下所示。

function myfunc(a,b=10)

但要注意,它在瀏覽器中不能一致地工作。 對我來說,它在我的桌面上使用chrome,但在android上的chrome上無效。 更安全的選擇,正如上面提到的那樣 -

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

這個答案的意圖不是重複相同的解決方案,其他人已經提到過,但是要通知函數定義中的參數分配可能適用於某些瀏覽器,但不要依賴它。






Links