我想编写一个带有可选参数的函数,并根据是否提供该参数来更改其行为。这是我想到的第一种方式:
function foo(optionalArg) {
if (optionalArg) {
// do something with the optionalArg
} else {
// do something different
}
}
这是最好的方法,还是有更安全/更好的方式?
编辑:如果你实际上读这个问题,你会发现它与"重复的"不同。有人声称这是。我知道如何为函数的参数提供默认值;当我第一次尝试解决这个问题时,我发现了这些链接。 但我并不是在寻找如何做到这一点。我正在寻找根据是否提供参数来改变我的功能行为的最佳方法。
答案 0 :(得分:1)
特异性通常更好,声明但未提供的参数未定义,因此您可以这样做:
function foo(optionalArg) {
if (optionalArg !== undefined) {
// do something with the optionalArg
} else {
// do something different
}
}
使用if (optionalArg)
会将虚假值(0
,''
等)视为完全省略,这可能不是您想要的。
如果参数显式设置为undefined
(如评论中提到的t.niese),此方法仍会返回假阴性,这种情况很少见但很可能。您可以检查arguments.length
以解决此问题,但ES6箭头功能中不提供arguments
。对于ES5,使用:
if (arguments.length > 0) { ...
应该做的伎俩,否则你可以使用:
function foo(...args) {
if (args.length > 0) { ...
并收集您自己的数组,将在箭头函数中工作:
(...args) => {
if (args.length > 0) { ...
答案 1 :(得分:1)
你做的方式很好,但这里有一些提示。
1)在ES6中,如果没有提供default argument,你可以拥有{{3}}:
function foo(optionalArg = 'something cool') {
// have your function go about its business as usual
}
2)与上述相同,但不使用ES6:
function foo(optionalArg) {
if (optionalArg === undefined) {
optionalArg = 'something cool'
}
// have your function go about its business as usual
}
3)检查你的论点是否未定义以避免误报:
function foo(optionalArg) {
if (optionalArg !== undefined) {
// do something with the optionalArg
} else {
// do something different
}
}
4)将较长的块放在else语句中以获得最佳可读性:
function foo(optionalArg) {
if (optionalArg !== undefined) {
// do something with the optionalArg
} else {
// do something different
// big
// huge
// grandiose
// epic
}
}
我希望有所帮助!