Jar*_*ard 6 javascript arguments destructuring default-arguments ecmascript-6
我目前正在使用对象解构模式和ES6对象解构默认参数的答案中描述的默认参数。
(function test({a = "foo", b = "bar"} = {}) {
console.log(a + " " + b);
})();
Run Code Online (Sandbox Code Playgroud)
我希望能够访问对象参数,而无需将其分配给函数体中的变量并显式列出每个键。
(function test({a = "foo", b = "bar"} = {}) {
console.log(a + " " + b);
})();
Run Code Online (Sandbox Code Playgroud)
我尝试命名对象参数,但该函数失去了将丢失的键解析为其默认值的能力。
(function test({a = "foo", b = "bar"} = {}) {
const options = {a, b};
console.log(options);
})();Run Code Online (Sandbox Code Playgroud)
在解构为命名参数时,它似乎忽略了默认参数。
这是 ES6 规范的一部分吗?有没有办法在函数体中无需额外代码即可实现所需的行为?
编辑:我删除了一个没有为问题添加上下文的多余示例。
老实说,我认为你把这个问题复杂化了。默认参数不是强制性的——在这种情况下,没有它你的代码可以更干净。
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 barRun Code Online (Sandbox Code Playgroud)
特别是关于你的最终片段:
(function test(options = {a: "foo", b: "bar"}) {
console.log(options);
})({a: "baz"});Run Code Online (Sandbox Code Playgroud)
问题是当传递的值为 时使用默认参数undefined。这里,传递的值为{a: "baz"}。那不是undefined,所以默认参数被忽略。对象不会自动合并。
更广泛地回答您的问题:无法同时获取对象并在方法的参数中解构其某些属性。坦率地说,我很感激,因为函数签名可能很难乍一看。