[英]passing default object as function parameter es6 works but not as plain parameter
[英]Passing in undefined as a parameter in a function (ES6)
我有一个关于使用具有默认参数的es6函数的问题。
这是一个例子:
const add = (a = 1, b = 2) => a + b;
如您所见, a
和b
分别默认为1
和2
。
使用默认值,我可以在没有任何参数的情况下调用函数,如下所示:
add(); // 3
我也可以省略参数b
:
add(2); // 4
要省略参数a
,我可以传入undefined
:
add(undefined, 3); // 4
我的问题:
将undefined
作为第一个参数传递以使用默认的第一个参数(在这种情况下为1
调用该函数是否是不好的做法?
感谢JonathanMitchell提出了object参数。
const add = (args = {}) => {
const a = args.a || 1;
const b = args.b || 2;
return a + b;
}
例子:
add(); // 3
add({a: 2}) // 4
add({b: 3}); // 5
编辑:
loganfsmyth提供了更好的解决方案。
使用|| 格式不正确,因为如果您传递0,它也会使用默认值。
更好,更紧凑的解决方案:
const add = ({a = 1, b = 2} = {}) => a + b
Logan使用ES6的解构分配 (请参阅“默认”值)来分配a
和b
默认值(如果此类参数的值评估为undefined
。
通常这不是最佳选择-默认结构应该如此,以便仅在同时使用第一个参数时才使用第二个参数,仅在使用前两个参数时才使用第二个参数,依此类推,因此您没有传递undefined
。
除非您重新定义函数以获取对象,否则似乎没有一种仅为第二个参数设置值的标准方法,例如add({b: 5})
,因此传入undefined
似乎是唯一的选择。
MDN在此处的文档中进行了说明,请参阅“示例/传递未定义”。
实际上,更好的选择是创建供稿字典以传递到函数中。 这样,您可以设置自己喜欢的值,而将其他值保持不变或保留为另一个值。
feed_dict = {x: 1, y: 2}
然后,您应该构造一个函数以接收字典并对其值进行加法运算
const add = (dict) => {
for (var keys in dict) {
sum += dict[keys]
}
return sum
add(feed_dict)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.