我有一个函数,它接受一个对象作为参数。对象的属性默认值已确定。我希望给定参数的缺失项被分配相应的默认值。然而,到目前为止,我的函数参数只返回在函数调用中给定的条目。
我的尝试
function x(obj1 = {foo: 'bar', fizz: 'buzz'}) {
console.log(obj1);
}
x({foo: 10}); // {foo: 10}
function y(obj2 = ({foo: 'bar'}, {fizz: 'buzz'})) {
console.log(obj2);
}
y({foo: 20}); // {foo: 20}
function z(obj3 = ({foo: foo} = {foo: 'bar'}, {fizz: fizz} = {fizz: 'buzz'})) {
console.log(obj3)
}
z({foo: 30}); // {foo: 30}
我的目标
function f(/* <{foo: 'bar', fizz: 'buzz'}> */) {
console.log(/* <obj> */);
}
f({foo: 40}); // {foo: 40, fizz: 'buzz'}
尝试排列运算符:
function x(obj1 = {}) {
let defaultObj = {foo: 'bar', fizz: 'buzz',...obj1};
console.log(defaultObj);
}
x({foo: 10});
其工作原理是:let x = {a: 1, b: 1, a:2}
将导致x = { a: 2 , b : 1}
,这意味着稍后定义的属性将覆盖之前的属性(使用相同的键(。
在函数参数中使用Object destructuring
。
function test({foo = 'bar', fizz = 'buzz'}) {
console.log({foo, fizz});
}
test({foo: 40});
test({foo: 50, fizz: "abcde"});
检查文档