2012-10-22 52 views
35

我想知道,你可以用一個可以忽略的參數創建一個函數。如何測試參數是否提供給函數?

EX。 (這是不好的代碼,但它顯示了我想要的東西。)

function parameterTest(test) 
{ 
    if exists(test) 
    { 
    alert('the parameter exists...'); 
    } 
    else 
    { 
    alert('The parameter doesn\'t exist...'); 
    } 
} 

所以,如果你parameterTest()那麼結果將是一個消息「參數不存在......」。如果您撥打parameterTest(true),則會返回「參數存在...」。

有人可以幫我嗎?這可能嗎?

+1

http://www.openjs.com/articles/optional_function_arguments.php – Jrod

+0

bool'的'作爲變量名的選擇使得這款相當混亂polyglots –

+0

這是一個非常古老的問題,但顯然每天都在觀看,感謝您的意見。我編輯了原文,使其更加清晰。 –

回答

54

這是一個非常頻繁的模式。

可以使用

function parameterTest(bool) { 
    if (bool !== undefined) { 

然後,您可以調用函數與這些形式的一個測試:

parameterTest(); 
parameterTest(someValue); 

要小心,不要讓測試的頻繁錯誤

if (!bool) { 

因爲您無法區分未提供的值與false0""

+2

'typeof(bool)'應該是'typeof bool',對吧? – Johan

+0

@Johan很確定你可以用它作爲一個函數和一個操作符。似乎在鉻至少工作 – sachleen

+1

看起來像你是正確的:) https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof – Johan

6

在JavaScript中,如果您忽略提供參數,它將默認爲undefined

無論是在瀏覽器控制檯還是使用JSFiddle,您都可以輕鬆地爲自己嘗試一下。

正如您所說,您可以檢查參數的存在,並且以這種方式編寫可以使用參數或不使用參數的函數。然而,JavaScript Garden(一個很好的資源)建議遠離typeof在其他大多數情況下,因爲它的輸出幾乎是無用的(檢查results of typeof表)。

+1

作爲替代方案,jquery確實提供了一個'$ .type'方法,該方法可以跨瀏覽器一致地工作。 –

+1

該鏈接表示typeof僅適用於這種情況,這對於這個問題已經足夠了。 – EralpB

9
function parameterTest(bool) 
{ 
    if(typeof bool !== 'undefined') 
    { 
    alert('the parameter exists...'); 
    } 
    else 
    { 
    alert('The parameter doesn\'t exist...'); 
    } 
} 
1
function parameterTest(p) { 
    if (p === undefined) 
     alert('The parameter doesn\'t exist...'); 
    else 
     alert('the parameter exists...'); 
} 
+0

Javascript最適合'===':) – Matteo

4

最好的方法來檢查:如果PARAM不確定

function parameterTest(param) { 
    if (param !== undefined) 
    ... 

PARAM可能也是一個變量或函數名

0

我知道這是舊的,但這是我首選的方式來檢查,並分配默認v alues到功能:

function testParamFunction(param1, param2) { 
    param1 = typeof param1 === 'undefined' ? null : param1; 
    param2 = typeof param2 === 'undefined' ? 'default' : param2; 

    // exit if the required parameter is not passed 
    if (param1 === null) { 
     console.error('Required parameter was not passed'); 
     return; 
    } 

    // param2 is not mandatory and is assigned a default value so 
    // things continue as long as param1 has a value 
} 
相關問題