【问题标题】:How to set default values for named function parameters simulated via object literals in JavaScript?如何为通过 JavaScript 中的对象文字模拟的命名函数参数设置默认值?
【发布时间】:2016-07-03 13:36:04
【问题描述】:

为了便于阅读,我想在我的 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'。”

提前致谢!

【问题讨论】:

    标签: javascript object-literal named-parameters default-parameters


    【解决方案1】:

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

    执行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: '...'})

    【讨论】:

      【解决方案2】:
      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
      

      Reference on MDN.

      【讨论】:

        【解决方案3】:

        正确的方法是

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

        也就是说,

        • 如果没有传递参数,则回退到{}

        • 销毁参数或回退,将someBoolean 属性提取为变量。如果没有这样的属性,回退到false

        【讨论】:

          【解决方案4】:
          myFunction: function({someBoolean = false}){
              if (someBoolean) {
                  [do stuff]
              }
              [do other stuff]
          },
          

          【讨论】:

            猜你喜欢
            • 2010-10-28
            • 1970-01-01
            • 2021-12-30
            • 2013-01-01
            • 1970-01-01
            • 2020-09-16
            • 2017-03-08
            相关资源
            最近更新 更多