为了便于阅读,我想在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]
},