如何在 JavaScript 中为通过对象字面量模拟的命名函数参数设置默认值?
How to set default values for named function parameters simulated via object literals in JavaScript?
我想在我的 JavaScript 函数中使用命名参数(通过对象文字模拟)以便于阅读。当我明确传递我的参数时,我编写的代码工作正常,但我在尝试设置默认值时遇到了问题,因此我的函数不仅可以通过 as myFunction({someBoolean:true}) 或 as myFunction 调用() 这意味着默认值为 someBoolean:false。
myFunction: function({myArgs}){
myArgs.someBoolean = myArgs.someBoolean || false;
if (myArgs.someBoolean) {
[do stuff]
}
[do other stuff]
},
这在我调用 myFunction({someBoolean:true}) 时工作正常,但是当我调用 myFunction() 时,我得到 "Uncaught TypeError: Cannot read property 'someBoolean' of undefined."
提前致谢!
请注意,如果您需要多个默认参数并且提供了一些默认参数,则之前的答案将不起作用:
执行 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
myFunction: function({someBoolean = false}){
if (someBoolean) {
[do stuff]
}
[do other stuff]
},
正确的方法是
function f({someBoolean = false} = {}){
console.log(someBoolean)
}
f(); // false
f({}); // false
f({someBoolean: true}); // true
即
如果没有传递参数,回退到{}
。
析构参数或回退,提取someBoolean
属性作为变量。如果没有这样的 属性,回退到 false
.
我想在我的 JavaScript 函数中使用命名参数(通过对象文字模拟)以便于阅读。当我明确传递我的参数时,我编写的代码工作正常,但我在尝试设置默认值时遇到了问题,因此我的函数不仅可以通过 as myFunction({someBoolean:true}) 或 as myFunction 调用() 这意味着默认值为 someBoolean:false。
myFunction: function({myArgs}){
myArgs.someBoolean = myArgs.someBoolean || false;
if (myArgs.someBoolean) {
[do stuff]
}
[do other stuff]
},
这在我调用 myFunction({someBoolean:true}) 时工作正常,但是当我调用 myFunction() 时,我得到 "Uncaught TypeError: Cannot read property 'someBoolean' of undefined."
提前致谢!
请注意,如果您需要多个默认参数并且提供了一些默认参数,则之前的答案将不起作用:
执行 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
myFunction: function({someBoolean = false}){
if (someBoolean) {
[do stuff]
}
[do other stuff]
},
正确的方法是
function f({someBoolean = false} = {}){
console.log(someBoolean)
}
f(); // false
f({}); // false
f({someBoolean: true}); // true
即
如果没有传递参数,回退到
{}
。析构参数或回退,提取
someBoolean
属性作为变量。如果没有这样的 属性,回退到false
.