Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为JavaScript中通过对象文本模拟的命名函数参数设置默认值?_Javascript_Object Literal_Named Parameters_Default Parameters - Fatal编程技术网

如何为JavaScript中通过对象文本模拟的命名函数参数设置默认值?

如何为JavaScript中通过对象文本模拟的命名函数参数设置默认值?,javascript,object-literal,named-parameters,default-parameters,Javascript,Object Literal,Named Parameters,Default Parameters,我希望在JavaScript函数中使用命名参数(通过对象文本模拟),以便于可读性。当我显式地传递参数时,我编写的代码工作得很好,但是我在尝试设置默认值时遇到了问题,因此我的函数不仅可以通过as myFunction({someBoolean:true})或as myFunction()调用,这意味着默认值为someBoolean:false myFunction: function({myArgs}){ myArgs.someBoolean = myArgs.someBoolean ||

我希望在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()时,我得到“未捕获的TypeError:无法读取未定义的属性'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:'…'})

用于对象解构,这样当传递具有
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

.

正确的方法是

函数f({someBoolean=false}={}){ console.log(someBoolean) } f();//假的 f({});//假的 f({someBoolean:true});//正确
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]
},