Javascript 默认函数参数不能像我预期的那样工作

Javascript 默认函数参数不能像我预期的那样工作,javascript,node.js,function,parameters,Javascript,Node.js,Function,Parameters,我有这个功能: const func=a,b,options={opt1:false,opt2:false,opt3:false}=>{ //做点什么 console.logoptions;//{opt1:false,opt2:false,opt3:false} } 所以当我在没有任何参数的情况下调用它时,我得到了这个 func'a',b',{opt3:true}; //{opt3:true} 而不是预期的: //{opt1:false,opt2:false,opt3:true} 这是正确的行为

我有这个功能:

const func=a,b,options={opt1:false,opt2:false,opt3:false}=>{ //做点什么 console.logoptions;//{opt1:false,opt2:false,opt3:false} } 所以当我在没有任何参数的情况下调用它时,我得到了这个

func'a',b',{opt3:true}; //{opt3:true} 而不是预期的:

//{opt1:false,opt2:false,opt3:true} 这是正确的行为。options={opt1:false,opt2:false,opt3:false}仅当调用函数时没有提供对象时

const func = (a, b, options = { opt1: false, opt2: false, opt3: false }) => {
  // do something
  options.opt1 = options.opt1 || false
  options.opt2 = options.opt2 || false
  options.opt3 = options.opt3 || false

  console.log(options); 
 }

这是通过检查对象属性并根据它们是否已设置来进行设置的方法。

这是预期的行为。创建默认选项参数时,默认值为“有3个字段”。当您传递{opt3:true}时,您将跳过默认值,因为您提供了自己的。默认值不会为您填充缺少的值。

您已设置了默认选项,但尚未设置选项中的各种属性的默认值。因为您为选项提供了一个对象,所以正在使用该对象

可以使用解构为属性提供默认值,然后为参数提供空白默认值:

常量func=a,b,{opt1=false,opt2=false,opt3=false}={}=>{ //做点什么 console.logopt1、opt2、opt3; }; func1,2,{opt1:true};
功能1,2;但是您是使用{opt3:true}作为第三个参数funca,b,{opt3:true}调用它的。对象的默认参数不会合并单个属性。你通过了整个对象,或者如果没有通过,则通过了整个默认对象。是的,我明白,我想知道的是有什么解决办法吗?对不起,我不是母语人士,有时我很难确定我的问题是什么,我明白它是按预期工作的,但我只是想知道是否有这样的解决方案,它不需要大量的重复代码。