我有这个功能:
const func = (a, b, options = { opt1: false, opt2: false, opt3: false }) => {
// do something
console.log(options); // { opt1: false, opt2: false, opt3: false }
}
所以当我在没有任何参数的情况下调用它时,我得到了这个
func('a', 'b', { opt3: true });
// { opt3: true }
而不是预期:
// { opt1: false, opt2: false, opt3: true }
最佳答案
您已默认选项
,但您尚未默认选项内的各种属性。由于您正在为 options
提供一个对象,因此正在使用该对象。
您可以使用解构来提供属性的默认值,然后为参数提供空白的默认值:
const func = (a, b, { opt1 = false, opt2 = false, opt3 = false } = {}) => {
// do something
console.log(opt1, opt2, opt3);
};
func(1, 2, {opt1: true});
func(1, 2);
当然,您最终得到的选项是离散变量而不是对象。您始终可以重构该对象:
const func = (a, b, { opt1 = false, opt2 = false, opt3 = false } = {}) => {
const options = {opt1, opt2, opt3};
// do something
console.log(options);
};
func(1, 2, {opt1: true});
func(1, 2);
当然,由于这是您自己的对象,因此如果您愿意,您可以愉快地为其分配其他属性,而不必担心修改调用者的对象。
如果你不想使用解构,你只需像 ES2015 之前那样单独提供默认值,但可能使用属性扩展而不是 Object.assign
:
const func = (a, b, options = {}) => {
// do something
options = {opt1: false, opt2: false, opt3: false, ...options };
console.log(options);
};
func(1, 2, {opt1: true});
func(1, 2);
关于javascript - 默认函数参数没有按我的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843791/