传入undefined作为函数中的参数(ES6)

时间:2017-01-15 22:01:00

标签: javascript ecmascript-6

我有一个关于使用具有默认参数的es6函数的问题。

以下是一个例子:

const add = (a = 1, b = 2) => a + b;

如您所见,ab分别默认为12

使用默认值,我可以在没有任何参数的情况下调用该函数:

add(); // 3

我也可以省略参数b

add(2); // 4

要省略参数a,我可以传递undefined

add(undefined, 3); // 4

我的问题:

传递undefined作为第一个参数以便使用默认的第一个参数调用函数是不好的做法,在这个例子中是1

3 个答案:

答案 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时分配bundefined默认值。

答案 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)