Default value for function parameter?
所以我一直这样做,只要我记得,但我很好奇这是否真的应该做的。 你编写一个带参数的函数,所以你预计它有一个值,但如果没有,你有充分的理由将它默认为零。 我目前所做的是编写辅助函数:
1 2 | function foo() { return foo(0); }; function foo(bar) { ... }; |
我刚刚跑过一个我做过这个的实例,在理解我背后的逻辑之前,我奇怪地看了几秒钟。 我来自php,它很简单:
1 | function foo(bar=0) { ... } |
有没有我不知道的javascript替代品?
您不能在JavaScript中使用重载函数。而是使用基于对象的初始化,或检查值并在未提供时指定默认值。
在您的示例中,第二个函数
这是一个使用对象初始化的函数。
1 2 3 | function foo(config) { extend(this, config); } |
其中
调用该函数并将其命名为键值对
1 | foo({ bar: 0 }); |
另一种初始化方法是查看提供的值,如果未给出值,则指定默认值
1 2 3 | function foo(bar) { bar = bar || 0; } |
只要bar不是假值,这就可以工作。所以
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
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(); }); |