如何为JavaScript中通过对象字面量模拟的命名函数参数设置默认值



为了便于阅读,我想在JavaScript函数中使用命名参数(通过对象字面量模拟)。当我显式地传递参数时,我编写的代码工作得很好,但是我在试图设置默认值时遇到了麻烦,因此我的函数不仅可以通过myFunction({someBoolean:true})或myFunction()调用,这意味着默认值为someBoolean:false。

myFunction: function({myArgs}){
    myArgs.someBoolean = myArgs.someBoolean || false;
    if (myArgs.someBoolean) {
        [do stuff]
    }
    [do other stuff]
},

当我调用myFunction({someBoolean:true})时,这工作得很好,但是当我调用myFunction()时,我得到"未捕获的类型错误:无法读取未定义的属性'someBoolean'"。

提前感谢!

注意,如果您需要多个默认参数并且提供了一些参数,则前面的答案将不起作用:

执行myFunction({otherArg: 'hello'})不一定会将myArgs.someBoolean设置为false。

你应该把它改成下面的修改:

myFunction: function(myArgs){ // Switch to regular argument vs {myArgs}
    myArgs = myArgs || {}; // Make sure it provided
    myArgs.someBoolean = myArgs.someBoolean || false;
    myArgs.otherArg = myArgs.otherArg || 'defaultValue'
    if (myArgs.someBoolean) {
        [do stuff]
    }
    [do other stuff]
},

然后可以用:something.myFunction({someBoolean: true, otherArg: '...'})

function x({myArgs}){}

用于对象解构,这样当传递具有myArgs属性的对象时,您可以在函数内部使用myArgs作为变量。例如:

function x({myArgs}){
  console.log(myArgs);
}
x({myArgs: 5}); // logs 5

然而,你访问布尔像myArgs (myArgs.someBoolean)的对象属性。那么你应该用这个代替:

function x(myArgs = {someBoolean: false}){
  console.log(myArgs.someBoolean);
}
x({someBoolean: true}); // logs true
x(); // logs false

现在匹配您的情况。如果您想直接使用someBoolean,请使用:

function x({someBoolean} = {someBoolean: false}){
  console.log(someBoolean);
}
x({someBoolean: true}); // logs true
x(); // logs false

另一个选项是

function x({someBoolean = false, someOtherBoolean = true} = {}){
  console.log(someBoolean);
}
x({someBoolean: true}); // logs true
x(); // logs false

MDN参考

正确的方法是

function f({someBoolean = false} = {}){
  console.log(someBoolean)
}
f(); // false
f({}); // false
f({someBoolean: true}); // true

,

  • 如果不传递参数,回退到{}

  • 销毁参数或回退,提取someBoolean属性作为变量。如果没有此属性,则退回到false

myFunction: function({someBoolean = false}){
    if (someBoolean) {
        [do stuff]
    }
    [do other stuff]
},

最新更新