ES6对象解构默认参数

126

我正在尝试弄清楚是否有一种方法可以使用默认参数的对象解构而不必担心对象部分定义。考虑以下内容:

(function test({a, b} = {a: "foo", b: "bar"}) {
  console.log(a + " " + b);
})();

当我使用 {a: "qux"} 调用此函数时,控制台会显示 qux undefined,但我真正想要的是 qux bar。是否有一种方法可以在不手动检查所有对象属性的情况下实现这一点?
1个回答

244
是的,你也可以在解构中使用“defaults”:

是的,你也可以在解构中使用“defaults”:

(function test({a = "foo", b = "bar"} = {}) {
  console.log(a + " " + b);
})();

这不仅限于函数参数,而是适用于每个解构表达式。


3
太棒了!看起来在解构赋值时设置默认值(像你所做的那样)始终优于在默认参数一侧进行设置(就像我之前做的那样)。你同意这个观点吗?你能想到需要注意的事情吗? - user3019273
6
我认为没有一个被“优先选择”过另一个,它只是做了另一件事情。 - Bergi
3
不,解构只能处理 'undefined' - 显式传递 'null' 会导致错误。为了同时处理 'null' 和 'undefined',在函数内使用标准语句 b == null ? "bar" : b - Bergi
3
@Bergi,您能解释一下您的答案和 test({a="foo", b="bar"}) 之间的区别吗? - Yonggoo Noh
6
请看这里这里 - Bergi
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接