function es6教學 es6是什麼 - 設置JavaScript函數的默認參數值





10 Answers

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

如果delete_after的值不是falsey值,則將其指定為delete_after ,否則它將分配字符串"my default here" 。 有關更多詳細信息,請查看Doug Crockford對該語言的調查,並查看操作員部分

如果要傳遞false值,即falsenullundefined0"" ,則此方法不起作用。 如果您需要傳遞falsey值,則需要使用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" }); 
js import set

我希望JavaScript函數具有可選參數,我將其設置為默認值,如果未定義該值,則使用該參數。 在Ruby中你可以這樣做:

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

這適用於JavaScript嗎?

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



在ECMAScript 6中,您實際上可以準確地寫出您擁有的內容:

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

如果不存在或undefined這將把delete_after設置為false 。 你今天可以使用像這樣的ES6功能,如Babel等轉發器。

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




該解決方案適用於js:

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



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

function myfunc(a,b=10)

但請注意,它不能跨瀏覽器一致地工作。 對我來說,它在我的桌面上使用chrome,但在android上沒有使用chrome。 如上所述,更安全的選擇是 -

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

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




作為更新...使用ECMAScript 6,您可以在函數參數聲明中最終設置默認值,如下所示:

function f (x, y = 7, z = 42) {
  return x + y + z
}

f(1) === 50

正如 - http://es6-features.org/#DefaultParameterValues所引用的那樣




根據語法

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

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




ES6:正如大多數答案中已經提到的,在ES6中,您可以簡單地初始化參數和值。

ES5:大多數給定的答案對我來說都不夠好,因為在某些情況下我可能需要將0nullundefined等假值傳遞給函數。 要確定參數是否未定義,因為這是我傳遞的值而不是未定義的,因為根本沒有定義,我這樣做:

function foo (param1, param2) {
   param1 = arguments.length >= 1 ? param1 : "default1";
   param2 = arguments.length >= 2 ? param2 : "default2";
}



如果要使用最新的ECMA6語法,請使用此ECMA6

function myFunction(someValue = "This is DEFAULT!") {
  console.log("someValue --> ", someValue);
}

myFunction("Not A default value") // calling the function without default value
myFunction()  // calling the function with default value

它被稱為default function parameters 。 如果沒有傳遞值或未定義,它允許使用默認值初始化形式參數。 注意 :它不適用於Internet Explorer或舊版瀏覽器。

為了最大限度地兼容,請使用:

function myFunction(someValue) {
  someValue = (someValue === undefined) ? "This is DEFAULT!" : someValue;
  console.log("someValue --> ", someValue);
}

myFunction("Not A default value") // calling the function without default value
myFunction()  // calling the function with default value

這兩個函數具有完全相同的行為,因為這些示例中的每一個都依賴於如果在調用該函數時沒有傳遞參數值則參數變量將是undefined




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

以下代碼可能適用於這種情況,包括ECMAScript 6(ES6)以及早期版本。

function read_file(file, delete_after) {
    if(delete_after == undefined)
        delete_after = false;//default value

    console.log('delete_after =',delete_after);
}
read_file('text1.txt',true);
read_file('text2.txt');

當調用時跳過函數的參數值時,語言中的默認值有效,在JavaScript中,它被指定為undefined 。 這種方法在編程上看起來並不具有吸引力,但具有向後兼




如果由於某種原因你不在 ES6上並使用lodash這是通過_.defaultTo方法的默認函數參數的_.defaultTo方法:

var fn = function(a, b) {
  a = _.defaultTo(a, 'Hi')
  b = _.defaultTo(b, 'Mom!')

  console.log(a, b)
}

fn()                 // Hi Mom!
fn(undefined, null)  // Hi Mom!
fn(NaN, NaN)         // Hi Mom!
fn(1)                // 1 "Mom!"
fn(null, 2)          // Hi 2
fn(false, false)     // false false
fn(0, 2)             // 0 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

如果當前值為NaNnullundefined ,則將設置默認值






Related