2014-06-19 48 views
0

在我的代碼中,我有一個函數可以創建一個給定幾個參數的新地圖。我想這樣做,如果沒有參數傳遞,將使用一些默認值。檢查函數參數的速記方法

爲什麼不這項工作:

function create(a,b,c) { 
    return new Map(a,b,c || 10,1,10); // create new map using a b c as parameters 
    // or 10, 1, 10 if none entered. 
} 

create(); 

假設有一個構造函數「地圖」,將接受和處理這些參數。

除了進行if/else類型檢查外,我還能做些什麼?

回答

0

我知道下一些限制,最短的方法是使用

<var> = <var> || <defaultvalue>; 

所以

Return new Map((a = a || 10), (b = b || 1), (c = c || 10)); 

然而這樣的幾乎沒有可讀性,而且你可能要考慮的構造函數之前移動分配。

然而,限制是所有的謬誤值都會導致默認被分配,這可能是某些數值的問題。

+0

備註:上面的語法是> val = val ==='undefined'的更一般的版本? Defaultvalue:value; – MABVT

+0

這可能是我想要的,但你說得對,它並不是那麼可讀。 我有一個檢查,說如果!a,然後a = 10等。 感謝您的幫助。 – Josh

0

你可以這樣來做:

function create(a, b, c) { 
    a = typeof a !== 'undefined' ? a : 10; 
    b = typeof b !== 'undefined' ? b : 1; 
    c = typeof c !== 'undefined' ? c : 10; 
    return new Map(a, b, c); 
} 

JavaScript並沒有提供默認的函數值的參數化。

+0

謝謝你,這和我已經有的相似。很高興知道有可能有更好的方法來做到這一點,但。另外,糟糕的JavaScript沒有這樣的東西。 – Josh