17

在查看与将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 支持的一些早期标准的一个例子(MDN 上function似乎没有提到这一点)?

4

3 回答 3

18

这似乎在 ECMAScript 6 规范中,目前只有 Firefox 支持

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

于 2013-02-02T00:08:28.833 回答
8

Lostsource 的回答是正确的,来到 ECMA6,很可能支持默认值,我认为它会,但由于它仍然是一个工作草案,你不能确定......现在,你可以使用逻辑或:

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

这有点像三元组。表达式从左到右解析:一旦 JS 遇到一个真值,这就是将被分配的值:

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;
于 2013-02-02T00:28:05.120 回答
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
}
于 2013-02-02T00:07:00.333 回答