繁体   English   中英

在函数(ES6)中将undefined作为参数传递

[英]Passing in undefined as a parameter in a function (ES6)

我有一个关于使用具有默认参数的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调用该函数是否是不好的做法?

感谢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的解构分配 (请参阅“默认”值)来分配ab默认值(如果此类参数的值评估为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM