编写一个JavaScript函数,根据可选参数更改行为
我想编写一个函数,它接受一个可选参数,并根据是否提供该参数来更改其行为。这是我想到的第一种方法:编写一个JavaScript函数,根据可选参数更改行为,javascript,function,Javascript,Function,我想编写一个函数,它接受一个可选参数,并根据是否提供该参数来更改其行为。这是我想到的第一种方法: function foo(optionalArg) { if (optionalArg) { // do something with the optionalArg } else { // do something different } } 这是最好的方法,还是有更安全/更好的方法 编辑:如果你真的读了这个问题,你会注意到它与一些人声称的
function foo(optionalArg) {
if (optionalArg) {
// do something with the optionalArg
} else {
// do something different
}
}
这是最好的方法,还是有更安全/更好的方法
编辑:如果你真的读了这个问题,你会注意到它与一些人声称的“重复”不同。我知道如何为函数的参数提供默认值;当我第一次尝试自己解决这个问题时,我发现了这些链接。但我不想知道怎么做。我正在寻找根据是否提供参数来更改函数行为的最佳方法。特殊性通常更好,声明但未提供的参数未定义,因此您可以执行以下操作:
function foo(optionalArg) {
if (optionalArg !== undefined) {
// do something with the optionalArg
} else {
// do something different
}
}
使用if(optionalArg)
将错误值(0
,'
等)视为完全忽略,这可能不是您想要的
如果参数被显式设置为undefined
(正如t.niese在注释中提到的),此方法仍将返回假阴性,这是罕见的,但也是可能的。您可以检查arguments.length
来解决这个问题,但是arguments
在ES6 arrow函数中不可用。对于ES5,使用:
if (arguments.length > 0) { ...
应该这样做,否则您可以使用:
function foo(...args) {
if (args.length > 0) { ...
并收集您自己的阵列,该阵列将在箭头函数中工作:
(...args) => {
if (args.length > 0) { ...
你现在的做法很好,但这里有一些提示 1) 在ES6中,如果未提供一个,则可以使用:
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
}
}
我希望这有帮助 @Juhana不改变行为,它为可选参数提供默认值。@Juhana这不是重复的。那些帖子没有回答我的问题。有区别。@nicael这不是重复的。那些帖子没有回答我的问题。有区别。@torazaburo这不是重复的。那些帖子没有回答我的问题。这是有区别的。当作为参数传递的值是未定义的时,这会混淆这种情况。针对
参数进行测试。长度是确定传递了多少参数的更好方法。检查参数并不总是可用的,尤其是在ES6 arrow函数中。我正在添加一个使用等效数组的示例,该数组将全面工作。非常好的示例。非常感谢。其他帖子没有回答这个问题,一些人声称这是一个副本。太棒了,帮了很多忙,非常感谢。其他帖子没有回答这个问题,一些人声称这是一个复制品。