Do函数参数支持JavaScript中的默认值



在研究将PHP函数移植到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似乎没有提到这一点)?

这似乎在ECMAScript 6规范中,目前仅由Firefox 支持

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters

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/三元更适合(如JollySin的回答所示)。其三元等价物为:

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

有点像。你可以做一些类似的事情:

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
}

最新更新