功能参数的默认值?

use*_*725 11 javascript

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

function foo() { return foo(0); };
function foo(bar) { ... };
Run Code Online (Sandbox Code Playgroud)

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

function foo(bar=0) { ... }
Run Code Online (Sandbox Code Playgroud)

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

Anu*_*rag 17

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

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

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

function foo(config) {
    extend(this, config);
}
Run Code Online (Sandbox Code Playgroud)

where extend是一个将config对象与当前对象合并的函数.它类似于$.extendjQuery中的方法或$extendMooTools的方法.

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

foo({ bar: 0 });
Run Code Online (Sandbox Code Playgroud)

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

function foo(bar) {
    bar = bar || 0;
}
Run Code Online (Sandbox Code Playgroud)

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

function foo(bar) {
    bar = (typeof bar == 'undefined' ? 0 : bar);
}
Run Code Online (Sandbox Code Playgroud)


Ann*_*nie 5

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

function foo(bar) {
  bar = bar || 0;
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 你最好检查一下`bar === undefined`而不是做这个简单的测试. (5认同)