所以,只要我记得,我一直这样做,但我很好奇这是否真的应该做的事情。你编写一个带参数的函数,所以你预计它有一个值,但如果没有,你有充分的理由将它默认为零。我目前所做的是编写辅助函数:
function foo() { return foo(0); };
function foo(bar) { ... };
我刚遇到一个我做过这个的实例,在理解我背后的逻辑之前,我奇怪地看了几秒钟。我来自php,它很简单:
function foo(bar=0) { ... }
是否有我不知道的javascript替代方案?
答案 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();
});