解构和设置嵌套默认值
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
}
});
我想了一会儿,但似乎无法按照我希望的方式完成这项工作。实际上,我在这里想要的只是为可选参数设置嵌套默认值。 我希望看到的输出应该是:
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
}
});