【问题标题】:How to check if a parameter has been passed如何检查参数是否已传递
【发布时间】:2014-01-02 18:29:55
【问题描述】:

我正在将参数传递给我编写的 JavaScript 库中的函数:

ffff.setup({
    'size':{'width':'100','height':'100'}
});

在函数中,我把它们捡起来:

var ffff = {
    setup: function(config) {
        if (config["size"]["width"]) {my_width = config["size"]["width"];}
        if (config["size"]["height"]) {my_height = config["size"]["height"];}
    }
}

我的错误是,如果我不指定参数,我会得到一个Cannot read property 'height' of undefined 错误:(错误发生在if (config["size"]["height"])

ffffr.setup({
    'size':{'width':'100'}
});

我应该如何检测是否提供了变量?

【问题讨论】:

  • 为什么需要将它们分配给局部变量?您可以只使用该对象。另外,那些应该是全局的吗?因为你没有声明它们......
  • 你在哪里访问file
  • 天啊,这么短的时间就有很多答案
  • 6+ 个答案,没有一个建议使用 mixin 方法来设置默认值。我很失望。

标签: javascript


【解决方案1】:

可能有更优雅的方法(例如,如果您使用该库,则使用 jQuery extends()),但在非常基本的级别上,您可以这样做

if(typeof config['size'] !== "undefined" && typeof config['size']['height'] !== "undefined")

【讨论】:

  • 检查typeof 确实没有意义,因为对象确实存在,您可以简单地使用in 运算符,例如:if ('size' in config && 'height' in config.size)
  • @elclanrs 似乎有最好的修复。
【解决方案2】:

如果你正在查看配置对象,你可以使用.hasOwnPropertyMDN

if( config.hasOwnProperty("propName") ){
 //use config.propName
}

【讨论】:

    【解决方案3】:
    if (config.size && config.size.width) ...
    

    【讨论】:

    • 或如@elclanrs 上面所说:if ('size' in config && 'height' in config.size)
    【解决方案4】:

    试试:

    if (typeof variable === 'undefined') {
        // variable is undefined
    }
    

    或者:

    if (typeof (conf) === 'object') {
        // object is undefined
    }
    

    【讨论】:

      【解决方案5】:

      你可以使用

      config["size"].hasOwnProperty('width')
      

      【讨论】:

        【解决方案6】:

        检查是否已定义,并使用三元运算符设置默认值

        (param===undefined)?default_value:param;
        

        这将做的是检查它是否已定义,如果未定义,则将其设置为您想要的任何值,否则保持不变

        【讨论】:

          猜你喜欢
          • 2022-01-04
          • 2012-08-19
          • 1970-01-01
          • 2018-03-13
          • 2014-07-09
          • 1970-01-01
          • 2012-05-28
          • 2015-04-06
          • 2022-01-24
          相关资源
          最近更新 更多