2013-02-02 116 views
17

查看與移植PHP function to JavaScript相關的問題。我看到了什麼,我認爲是不正確的JavaScript:函數參數是否支持JavaScript中的默認值?

function my_isnum(str, negative=false, decimal=false) 

然後我在JSFiddle試過這樣:

function my_isnum(str, negative=false, decimal=-2) 
{ 
    console.log(arguments); 
    console.log(str); 
    console.log(negative); 
    console.log(decimal); 
} 
my_isnum("5", "Hi"); 

而且我大吃一驚的是,這是我在Firebug的控制檯中看到:

["5", "Hi"] 
5 
Hi 
-2 

現在在Chrome中,我看到:

Uncaught SyntaxError: Unexpected token = 

我不明白的是,這是Firefox支持的一些早期標準的例子(function上的MDN似乎沒有提到這一點)?

+0

我很驚訝FF也顯示了! – Popnoodles

+0

Firefox的JavaScript是ECMAScript 3的超集。它具有非標準語法的功能。其中包括數組解析,'let'表達式和解構賦值。儘管如此, –

回答

4

整理。你可以這樣做:

function the_func(some_val) { 
    // if some_val is not passed to the_func 
    if (typeof some_val == 'undefined') { 
     some_val = 'default_some_val'; 
    } 

    // now you can use some_val in the remaining parts of the method 
} 
+0

也許只有兩條線。 – Popnoodles

+1

這就是我在JavaScript中看到的100%的代碼和每個其他參數檢查代碼的樣子。 –

+0

可以這樣做:some_val =(typeof some_val!=='undefined')? some_val:'defaultVal'; – javaBean007

8

Lostsource的答案是正確的,來ECMA6,默認值很可能獲得支撐,我認爲會,但它仍是一個工作草案,你不能真的相信......現在,你可以使用邏輯或:

function foo(bar, foobar) 
{ 
    bar = bar || 'foobar';//once 
    foobar = foobar || !!bar || true;//or multiple times 

這有點像三元組。表達決心,從左至右依次爲:只要JS遇到truthy值,這就是將被分配:

var someVar = false || undefined || null || 0 || 1; 

將指派1至someVar。如果沒有值傳遞給函數,所有參數被分配undefined默認情況下,所以在這種情況下:

myArgument = myArgument || 'default'; 
//is the same as: 
myArgument = undefined || 'default';//evaluates to "default" 

但是當你傳遞false作爲參數,或null,或空字符串,則默認值將被分配,所以要小心。
在這些情況下,if/ternary更合適(如在JollySin的答案中所見)。其三元當量是:

some_val = typeof some_val === 'undefined' ? 'default' : some_val;