nodejs函数中的可选参数

时间:2014-05-10 05:56:00

标签: javascript node.js

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

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

    function optionalArguments(a,b){
        var a = a || "nothing";
        var b = b || "nothing";
    } 

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

optionalArguments(false,false)

a和b都返回"没有"虽然我已经通过了论证。

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

optionalArguments(" XXX&#34);

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

感谢任何帮助。 提前谢谢。

4 个答案:

答案 0 :(得分:17)

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

function optionalArguments(a="nothing", b="nothing") {
  return `a: ${a}, b: ${b}`;
}

然后

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'

答案 1 :(得分:10)

你完全喜欢客户端javascript。

你建议的方式确实有效,但正如你所注意到的那样,当可以忽略的论点不是最后的论点时,这是痛苦的。

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

function optionalArguments(options){
    var a = options.a || "nothing";
    var b = options.b || "nothing";
}

请注意,||很危险。如果您希望能够设置false""0NaNnull等参数,则必须这样做:

function optionalArguments(options){
    var a = options.a !== undefined ? options.a : "nothing";
    var b = options.b !== undefined ? options.b : "nothing";
}

如果你经常这样做,实用功能会很方便:

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");
}

这样你甚至可以用

调用你的函数
optionalArguments();

答案 2 :(得分:2)

||只是普通的旧版或操作符。当价值预计不会是假的时候它会派上用场。但是,如果0falsenull等值有效且符合预期,则需要采用不同的方法。

== null

要检查是否传递了非空值,请使用== null。传入truenull时,这将返回undefined

function optionalArguments (a, b) {
    a = a == null ? "nothing" : a;
    b = b == null ? "nothing" : b;
    ...
}

在大多数情况下,这是实现可选参数的最佳方法。它允许调用者在需要默认值时传递null。当调用者想要传递第二个参数的值时,它特别有用,但是对于第一个参数使用默认值。例如,optionalArguments(null, 22)

=== undefined

如果null是有效值和期望值,请使用undefined===运算符进行上述比较。确保使用有效值undefined进行比较。脚本可能会说var undefined = 0,给您带来无尽的麻烦。您始终可以=== void 0来测试undefined

arguments.length

如果我这样称呼您的功能怎么办?

optionalArguments("something", void 0);

在这种情况下,我确实传递了一个值,但该值为undefined。有时您可能真的想要检测是否传入参数。在这种情况下,您需要检查arguments.length

function optionalArguments (a, b) {
    a = arguments.length > 0 ? a : "nothing";
    b = arguments.length > 1 ? b : "nothing";
    ...
}

答案 3 :(得分:0)

作为使用默认参数并且仍然能够使用false值的简单方法,您可以这样做

function optionalArguments(a, b){
  a = typeof a !== 'undefined' ? a : "nothing"; 
  b = typeof b !== 'undefined' ? b : "nothing";
} 

另请参阅this question

上的备选方案

无论您选择哪个选项,optionalArguments(, "xxx")都无效,因为缺少的参数会使语法无效:无法解析代码。要解决此问题,您可以使用

optionalArguments(undefined, "xxx");