在nodejs中创建一个带可选参数的函数的最佳方法是什么?
例如,我知道这种方法: -
function optionalArguments(a,b){
var a = a || "nothing";
var b = b || "nothing";
}
但在这种情况下如果我这样做:
optionalArguments(false,false)
a和b都返回"没有"虽然我已经通过了论证。
当我调用这样的函数时,我也得到意外的令牌错误:
optionalArguments(" XXX&#34);
是否有更好的或标准的方法来处理nodejs中的可选参数?
感谢任何帮助。 提前谢谢。
答案 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
,""
,0
,NaN
,null
等参数,则必须这样做:
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)
||
只是普通的旧版或操作符。当价值预计不会是假的时候它会派上用场。但是,如果0
,false
或null
等值有效且符合预期,则需要采用不同的方法。
== null
要检查是否传递了非空值,请使用== null
。传入true
或null
时,这将返回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");