nodejs函数中的可选参数

aze*_*ro0 8 javascript node.js

创建一个在nodejs中接受可选参数的函数的最佳方法是什么?

例如,我知道这种方法: -

    function optionalArguments(a,b){
        var a = a || "nothing";
        var b = b || "nothing";
    } 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,如果我这样做:

optionalArguments(FALSE,FALSE)

虽然我已经通过了一个论证,但是a和b都返回"没有".

当我调用这样的函数时,我也得到意外的令牌错误:

optionalArguments( "XXX");

是否有更好的或标准的方法来处理nodejs中的可选参数?

任何帮助表示赞赏.提前致谢.

wat*_*ova 23

如果您使用的是Node.js v6(或更高版本),则可以访问默认参数.

function optionalArguments(a="nothing", b="nothing") {
  return `a: ${a}, b: ${b}`;
}
Run Code Online (Sandbox Code Playgroud)

然后

optionalArguments(false, false)     // 'a: false, b: false'
optionalArguments('this')           // 'a: this, b: nothing'
optionalArguments()                 // 'a: nothing, b: nothing'
optionalArguments(undefined,'that') // 'a: nothing, b: that'
Run Code Online (Sandbox Code Playgroud)


Den*_*ret 11

你完全喜欢客户端javascript.

你建议的方式确实有效,但正如你所注意到的那样,当可以省略的论点不是最后一个时,就会感到痛苦.

在这种情况下,常用的是"选项"对象:

function optionalArguments(options){
    var a = options.a || "nothing";
    var b = options.b || "nothing";
}
Run Code Online (Sandbox Code Playgroud)

注意这||很危险.如果你希望能够设置参数,像false,"",0,NaN,null,你必须做这样的:

function optionalArguments(options){
    var a = options.a !== undefined ? options.a : "nothing";
    var b = options.b !== undefined ? options.b : "nothing";
}
Run Code Online (Sandbox Code Playgroud)

如果你这么做的话,实用功能可以很方便:

function opt(options, name, default){
     return options && options[name]!==undefined ? options[name] : default;
}

function optionalArguments(options){
    var a = opt(options, 'a', "nothing");
    var b = opt(options, 'b', "nothing");
}
Run Code Online (Sandbox Code Playgroud)

这样你甚至可以调用你的函数

optionalArguments();
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,对象解构可能变得非常有用.函数定义可以重写为`function optionalArguments({a,b}){/*使用a和b像普通参数*/} optionalArguments({a:'foo',b:42});`.虽然找不到很多关于它的官方信息:http://wiki.ecmascript.org/doku.php?id = hash:destructuring (2认同)