功能参数的默认值?

时间:2010-09-08 21:34:10

标签: javascript

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

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

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

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

是否有我不知道的javascript替代方案?

4 个答案:

答案 0 :(得分:17)

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

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

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

function foo(config) {
    extend(this, config);
}

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

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

foo({ bar: 0 });

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

function foo(bar) {
    bar = bar || 0;
}

只要条形不是虚假值,这就有效。因此,foo(false)foo("")仍会将bar初始化为0。对于此类情况,请进行明确检查。

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

答案 1 :(得分:5)

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

function foo(bar) {
  bar = bar || 0;
  ...
}

答案 2 :(得分:1)

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

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

function foo(str) {
  str = !!str  ? str  : 'bar';
  ...
}

如果需要数字或布尔值。这允许0和false作为值。默认将在[undefined,null,{},functions]

上触发

使得只接受原始值(如number,boolean和string

)的值参数很方便
function foo(val) {
  val= !!val == val || val*1 ? val : 10;
  ...
}

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

答案 3 :(得分:0)

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

$.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();
});