关于javascript:函数参数的默认值?

Default value for function parameter?

所以我一直这样做,只要我记得,但我很好奇这是否真的应该做的。 你编写一个带参数的函数,所以你预计它有一个值,但如果没有,你有充分的理由将它默认为零。 我目前所做的是编写辅助函数:

1
2
function foo() { return foo(0); };
function foo(bar) { ... };

我刚刚跑过一个我做过这个的实例,在理解我背后的逻辑之前,我奇怪地看了几秒钟。 我来自php,它很简单:

1
function foo(bar=0) { ... }

有没有我不知道的javascript替代品?


您不能在JavaScript中使用重载函数。而是使用基于对象的初始化,或检查值并在未提供时指定默认值。

在您的示例中,第二个函数foo(bar)将替换第一个函数。

这是一个使用对象初始化的函数。

1
2
3
function foo(config) {
    extend(this, config);
}

其中extend是一个将配置对象与当前对象合并的函数。它类似于jQuery中的$.extend方法,或MooTools的$extend方法。

调用该函数并将其命名为键值对

1
foo({ bar: 0 });

另一种初始化方法是查看提供的值,如果未给出值,则指定默认值

1
2
3
function foo(bar) {
    bar = bar || 0;
}

只要bar不是假值,这就可以工作。所以foo(false)foo("")仍会将bar初始化为0。对于此类情况,请进行明确检查。

1
2
3
function foo(bar) {
    bar = (typeof bar == 'undefined' ? 0 : bar);
}

在JavaScript中,如果用户没有传入参数,则参数将是未定义的。您可以使用||如果参数的值未定义,则设置参数的值:

1
2
3
4
function foo(bar) {
  bar = bar || 0;
  ...
}


我所知道的最简单的方法是测试一个值,然后在没有找到值的情况下将其设置为默认值。我还没有碰到所有的班轮,这是我所拥有的最好的。

如果期望字符串值使用此值。默认值将触发这些值:[undefined,null,"]

1
2
3
4
function foo(str) {
  str = !!str  ? str  : 'bar';
  ...
}

如果期望数字或布尔值。这允许0和false作为值。默认将在[undefined,null,{},函数]上触发

方便用于创建仅接受原始值(如number,boolean和string)的值参数

1
2
3
4
function foo(val) {
  val= !!val == val || val*1 ? val : 10;
  ...
}

如果你想测试{}这样的对象,有关于这样做的文档,但它并不那么简单。


希望这对某人的回答更清楚一点 - 我最终使用ol'检查undefined if(typeof functionparameter !== 'undefined')

1
2
3
4
5
6
$.fn.extend({
    doThing: function(stringparameter = 'FooBar!', functionparameter){
        console.log('Here is your string '+stringparameter);
        // Run it if it's been passed through:
        if(typeof functionparameter !== 'undefined') functionparameter();
});