函数参数的默认值?

所以我一直这样做,只要我记得,但我很好奇,如果这真的是我应该做的。 你写一个函数接受一个参数,所以你预期它有一个值,但如果没有,你有一个很好的理由来默认它,说零。 我目前所做的是编写一个辅助函数:

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

我只是遇到了一个我这样做的实例,在理解其背后的逻辑之前,我奇怪地看了几秒钟。 我来自php,它是微不足道的:

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

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


你不能在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);
}

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

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

我知道的最简单的方法是测试一个值,如果没有找到值,则将其设置为默认值。 我还没有遇到过所有的班轮,这是我得到的最好的。

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

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

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

方便使值参数只接受数字,布尔值和字符串等原始值

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

如果您正在寻找像{}这样的对象进行测试,有关于这样做的文档,但并不那么简单。

链接地址: http://www.djcxy.com/p/96307.html

上一篇: Default value for function parameter?

下一篇: Javascript hoisting and variable assignment (with no declaration)