ES6对象解析默认参数

use*_*273 58 javascript ecmascript-6

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

(function test({a, b} = {a: "foo", b: "bar"}) {
  console.log(a + " " + b);
})();
Run Code Online (Sandbox Code Playgroud)

{a: "qux"}例如,当我打电话给我qux undefined时,我会在控制台中看到我真正想要的东西qux bar.有没有办法实现这一点,而无需手动检查所有对象的属性?

Ber*_*rgi 121

是.您也可以在解构中使用"默认值":

(function test({a = "foo", b = "bar"} = {}) {
  console.log(a + " " + b);
})();
Run Code Online (Sandbox Code Playgroud)

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

  • 漂亮!似乎在解构端设置默认值(你正在这样做的方式)总是优先在默认参数端(就像我一样).你同意吗?你能想到要注意的事吗? (3认同)
  • @Bergi你能解释一下你的答案和`test({a="foo", b="bar"})`之间有什么区别吗? (3认同)
  • 我不认为一个人比另一个人更"优先".它只是做了别的事情. (2认同)
  • @AlanHamlett不,解构只处理`undefined` - 传递`null`必须明确地完成,因此导致错误.要处理`null`和`undefined`,请使用标准`b == null?"bar":函数内部的b`. (2认同)
  • @YonggooNoh见[这里](/sf/answers/2877603851/)和[这里](/sf/ask/2399318001/) (2认同)