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

时间:2016-06-16 16:46:32

标签: javascript function

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

function foo(optionalArg) {
    if (optionalArg) {
        // do something with the optionalArg
    } else {
        // do something different
    }
}

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

编辑:如果你实际上这个问题,你会发现它与"重复的"不同。有人声称这是。我知道如何为函数的参数提供默认值;当我第一次尝试解决这个问题时,我发现了这些链接。 但我并不是在寻找如何做到这一点。我正在寻找根据是否提供参数来改变我的功能行为的最佳方法。

2 个答案:

答案 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
   }
}

我希望有所帮助!