2013-03-08 123 views
3

我幾乎沒有JavaScript的經驗,但在其他編程語言中可能會有以下情況,爲函數中缺少的參數設置默認值。處理JavaScript函數中沒有參數

例如可以說,我有一個函數

function foo(a , b) 
    return a + b 
{ 

我想能夠調用上述功能與1個參數或2個參數

一個參數的情況下:

foo(2) //a =2 and b would be automatically set to a default no argument value, 

兩參數情況:

foo(1,2) // a = 1 , b = 2 => 3 

這是可能在JavaScript是IE 8兼容或使用jQuery 1.7.2?

回答

6

JavaScript函數允許你打電話給他們以低於參數指定。

你要完成什麼是有可能做一些這樣的:

function foo(a , b){ 
    if(typeof b === "undefined"){ 
     b=3; 
    } 
    return a + b; 
} 
foo(5);//return 3; 

我強烈建議你檢查undefined依靠||運營商。我花了幾個小時調試代碼,做出了這個假設,並在通過0或其他虛假值時失敗。 JavaScript類型的系統可能會變得非常棘手,例如"0"是虛假的。

和諧的ECMAScript(下一版本)可以像其它語言使用以下語法

function foo(a , b=3){ 
    return a + b; 
} 

這不會像IE8的第一個版本的工作,雖然默認參數。

+1

這是最好的答案,你是唯一一個真正在檢查'undefined'的人... – 2013-03-08 00:26:46

+0

是的確需要undefined檢查 – pyCthon 2013-03-08 00:33:01

+0

@pyCthon如果你喜歡我的回答,請考慮接受它,或者告訴我你沒有做什麼認爲是明確的enoug h我可以改進它。 – 2013-03-08 01:11:13

3

是的,這是可能的。如果一個參數沒有被傳遞,你會得到一個特殊的值「undefined」。對我來說,以下工作:

function foo(a, b) { 
    a = a || defaultForA; 
    b = b || defaultForB; 

} 

由於方式的Javascript對待轉換爲boolean時,以下都將在上面的代碼片斷認爲是未定義:

undefined 
null 
0 
"" (empty string) 
false 

所以,如果這些價值觀是很重要你,你需要明確地測試未定義的而不是上面使用的「如果沒有錯誤」測試。

3

沒有,但你可以用三級運營商或手動模擬這種效果if語句(只需確保您檢查undefined!):

function foo(a, b) { 
    b = (typeof b === "undefined") ? 2 : b; 

    return a + b; 
} 
2

一個未定義的參數的計算結果爲假,所以你可以做這樣的事情在你的函數foo的beggining:如果a或b存在

a = a || 0; 
b = b || 0; 

這樣一來,他們將用自己的價值觀來評價和否則爲0。

2

如果您收到一個參數,您可以測試:

function foo(a, b) { 
    if(typeof b === "undefined") {b = 2;} 
} 

通過測試「未定義」也可以接受值爲false參數(如null""0false