解构和设置嵌套默认值

Destructuring and setting nested default values

我想了一会儿,但似乎无法按照我希望的方式完成这项工作。实际上,我在这里想要的只是为可选参数设置嵌套默认值。 我希望看到的输出应该是:

55, 44, { sub1: '0', sub2: 55, sub3: 'all'}

相反,我只是得到这个:

55, 44, { sub2: 55 }

有人能给我提个醒吗?

function foo({ param1=55, param2=44, param3:param3 = { sub1:sub1='0', sub2:sub2=200, sub3:sub3='all' } } = { }) {
  console.log(param1, param2, param3);
}

foo({
  param3: {
    sub2: 55
  }
});

您正在为 param3 传递 {sub2: 55},因此它不会评估默认值 { sub1:sub1='0', sub2:sub2=200, sub3:sub3='all' }(这里是文字,不是赋值目标,所以不会这样做无论如何你认为它做了什么)。

如果您希望 param3 始终是一个具有 3 个属性的对象,由三个默认值变量构造,您必须自己显式构建它:

function foo({param1=55, param2=44, param3: {sub1='0', sub2=200, sub3='all'} = {}} = {}) {
  var param3 = {sub1, sub2, sub3};
  console.log(param1, param2, param3);
}

默认参数只有在参数为空时才会被赋值。我认为你需要在函数体中使用 Object.assign

const defaults = { sub1:sub1='0', sub2:sub2=200, sub3:sub3='all' }
function foo({ param1=55, param2=44, param3 } = { }) {
  const myParam3 = Object.assign({}, defaults, param3);
  console.log(param1, param2, myParam3);
}

foo({
  param3: {
    sub2: 55
  }
});