我目前正在使用对象解构模式和ES6 Object Destructuring Default Parameters的答案中描述的默认参数。
(function test({a = "foo", b = "bar"} = {}) {
console.log(a + " " + b);
})();
我希望能够访问object参数,而无需将其分配给函数体中的变量并明确列出每个键。
(function test({a = "foo", b = "bar"} = {}) {
const options = {a, b};
console.log(options);
})();
我尝试命名对象参数,但该函数无法将缺失的密钥解析为默认值。
(function test(options = {a = "foo", b = "bar"} = {}) {
console.log(options);
})();
在解构为命名参数时似乎忽略了默认参数。
这是ES6规范的一部分吗?有没有办法在函数体中没有附加代码的情况下实现所需的行为?
修改:我删除了一个没有为问题添加上下文的多余示例。
答案 0 :(得分:4)
我只需将对象options
作为参数,并在分配默认值后在函数体内进行解构。
function test(options) {
options = Object.assign({a: 'foo', b: 'bar'}, options);
let {a, b} = options;
console.log(options, a, b);
}
test(); // foo bar
test({a: 'baz'}); // baz bar
test({b: 'fuz'}); // foo fuz
test({c: 'fiz'}); // foo bar
特别关注你的最终片段:
(function test(options = {a: "foo", b: "bar"}) {
console.log(options);
})({a: "baz"});
问题是当传递的值为undefined
时使用默认参数。这里传递的值是{a: "baz"}
。那不是undefined
,因此忽略默认参数。对象不会自动合并。
更广泛地回答您的问题:无法同时获取对象并在方法的参数中解构其某些属性。坦率地说,我很感激,因为功能签名很难以乍看之下阅读。