我有一个关于使用具有默认参数的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
?
答案 0 :(得分:2)
感谢JonathanMitchell建议使用对象参数。
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的deconstruction assignment(请参阅“默认”值),以便在此类参数评估为a
时分配b
和undefined
默认值。
答案 1 :(得分:1)
这通常不是最佳选择 - 默认参数的结构应使第二个仅在第一个使用时使用,第三个仅在前两个使用时使用,依此类推,所以你没有传递undefined
。
似乎并不是仅为第二个参数设置值的标准方法,例如add({b: 5})
除非您重新定义函数以获取对象,否则传递undefined
似乎是唯一的选择。
MDN在其文档here中执行此操作,请参阅"示例/传递未定义"。
答案 2 :(得分:1)
实际上,更好的选择是创建一个传递字典以传递给函数。这样,您可以设置您喜欢的值,并将其他值保留为原样或另一个值。
feed_dict = {x: 1, y: 2}
然后你应该构造一个函数来接受字典并对其值进行加法
const add = (dict) => {
for (var keys in dict) {
sum += dict[keys]
}
return sum
add(feed_dict)