2013-02-02 88 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;