2012-03-21 13 views
0

我無法找到類似的問題,我想這是因爲我找不到正確的問題/答案。 我想創建一個函數,如果在調用函數時沒有傳遞參數,將使用默認值,如果是這樣,則將函數參數中傳遞的值替換爲默認值。 例如:使用默認不需要的值的Javascript函數

function openBlock(false){ 
    // if parameter was passed with 'false' value, it will do this 

    // else it will put automatically a 'true' value to an function's argument 
} 

因此,如果調用一個函數openBlock()沒有任何參數,可以將考慮它在默認情況下是PARAM true。如果我使用參數false(如openBlock(false))調用一個函數,它將覆蓋默認行爲。

謝謝

回答

2

有各種方法在Javascript中要做到這一點,雖然沒有建在最簡單的模式是:

function(option) { 
    option = option || "default"; 
    // do stuff 
} 

但作爲@FelixKling指出,這不會工作你的情況,因爲它會用默認值替換任何false-y值(包括明確地將參數設置爲false)。對於要默認true布爾變量,你需要:

function(option) { 
    // default to "true" 
    option = option !== undefined ? option : true; 
    // do stuff 
} 

當你處理超過一個或兩個參數,最好的辦法是經常使用單一optionsconfig參數和檢查特性的存在:

function(options) { 
    var arg1 = option.arg1 !== undefined ? false : true; 
    var arg2 = option.arg2 || "default"; 
    // do stuff 
} 

如果你使用像jQuery庫或下劃線時,extend方法使得它非常容易建立一個對象使用默認值,然後如果存在與提供的值覆蓋它們:

function(options) { 
    var defaults = { 
     arg1: true, 
     arg2: "default" 
    }; 
    options _.extend(defaults, options); 
    // do stuff 
} 
+0

但 - 真的,更新。我通常在假y值應該被默認值替換的情況下使用這種模式,而不是布爾值。 – 2012-03-21 16:53:49

+0

@FelixKling我在想什麼,當我寫這... – nrabinowitz 2012-03-21 16:57:05

+0

非常感謝,我想這正是我所要求的,現在會檢查出來 – aspirinemaga 2012-03-21 16:57:45

2

JavaScript並沒有像其他語言那樣真正實現默認參數。

你必須自己實現這些功能:

function openBlock(argument) { 
    argument = typeof argument !== 'undefined'; 
} 

看看Is there a better way to do optional function parameters in Javascript?一個更通用的方法。

+0

感謝您的提交 – aspirinemaga 2012-03-22 17:03:45

+0

'openBlock(true)'將與'openBlock(false)'與此代碼相同。 – 2013-08-21 19:34:01

+0

@MaxNanasy:不知道'option'是'FALSE',將它設置爲TRUE;太... – Blender 2013-08-21 19:37:48