如何为作为函数参数传递的对象的所有未定义属性分配默认值?

How can I assign default values to all undefined properties of an object being passed as a function parameter?

我有一个函数接受一个对象作为参数。对象的 属性 默认值已确定。我希望给定参数的缺失条目分配相应的默认值。但是到目前为止,我的函数参数只有 returns 它在函数调用中给出的条目。

我的尝试

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'}

在函数参数中使用Object destructuring

function test({foo = 'bar', fizz = 'buzz'}) {
  console.log({foo, fizz});
}

test({foo: 40});
test({foo: 50, fizz: "abcde"});

Check the docs

尝试传播运算符:

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},这意味着以后定义的属性将覆盖之前定义的属性(使用相同的键)。