编写一个JavaScript函数,根据可选参数更改行为

Write a JavaScript function that changes behavior based on optional arguments

本问题已经有最佳答案,请猛点这里访问。

我想编写一个函数,它接受一个可选参数,并根据是否提供该参数来更改其行为。这是我第一个想到的方法:

1
2
3
4
5
6
7
function foo(optionalArg) {
    if (optionalArg) {
        // do something with the optionalArg
    } else {
        // do something different
    }
}

这是最好的方法,还是有更安全/更好的方法?

编辑:如果你真的读了这个问题,你会发现它不同于"复制品",一些人声称这是。我知道如何为函数的参数提供默认值;当我第一次试图自己解决这个问题时,我发现了这些链接。但我不想知道怎么做。我正在寻找根据是否提供了参数来更改函数行为的最佳方法。


你的做法很好,但这里有一些建议。

1)在ES6中,如果没有提供默认参数,则可以使用该参数:

1
2
3
function foo(optionalArg = 'something cool') {
   // have your function go about its business as usual
}

2)同上,但不使用ES6:

1
2
3
4
5
6
function foo(optionalArg) {
   if (optionalArg === undefined) {
      optionalArg = 'something cool'
   }
   // have your function go about its business as usual
}

3)检查你的论点是否未定义,以避免误报:

1
2
3
4
5
6
7
function foo(optionalArg) {
    if (optionalArg !== undefined) {
        // do something with the optionalArg
    } else {
        // do something different
    }
}

4)在else语句中放置较长的块以获得最佳可读性:

1
2
3
4
5
6
7
8
9
10
11
function foo(optionalArg) {
   if (optionalArg !== undefined) {
     // do something with the optionalArg
   } else {
     // do something different
     // big
     // huge
     // grandiose
     // epic
   }
}

希望有帮助!


特异性通常更好,声明但未提供的论点不明确,因此您可以这样做:

1
2
3
4
5
6
7
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,使用:

1
if (arguments.length > 0) { ...

应该这样做,否则你可以使用:

1
2
function foo(...args) {
  if (args.length > 0) { ...

并收集您自己的数组,它将在箭头函数中工作:

1
2
(...args) => {
  if (args.length > 0) { ...