【问题标题】:Can For-In loop result an undefined or null?For-In 循环会导致未定义或 null 吗?
【发布时间】:2017-03-16 12:19:55
【问题描述】:

这是我的代码:

const a = function(obj) {
  for (let key in obj) {
    if (!obj.hasOwnProperty(key)) {
      continue;
    }
    console.info(key.split('_'));
  }
};
a({a_b: 123});

我认为完全没有问题,但 SonarQube 给了我一个严重错误:

TypeError 可以抛出,因为这里的“key”可能为 null 或未定义。

key.split('_') 中的key 字样突出显示。表示变量键在这里可以是未定义/空的。

我尝试传入 {[undefined]: 123} 之类的东西,变量 key 变成了字符串“未定义”而不是真正的未定义。

因此。我想知道在任何可能的情况下密钥是否未定义/为空?还是只是误报?

这是截图:

【问题讨论】:

  • @Aᴍɪʀ 这是一个错字,console.info 在 for 循环中,错误仍然存​​在。
  • 嗯。也许 SonarQube 中存在错误。我从来没有使用过它。对象中的键总是字符串,所以key 不可能变成undefined。
  • @guest271314 不,这只是控制台评估命令的输出。
  • @guest271314 试试for (let j in {}) console.log('x:'+j),看看你得到了什么。
  • @Aᴍɪʀ 他已经删除了它们......无论如何,感谢您指出“对象中的键始终是字符串”这一事实。我之前肯定在其他地方读过那句话,现在我才认出来。那应该是SonarQube的bug。

标签: javascript sonarqube


【解决方案1】:

这是几个月前修复的 SonarQube JavaScript 分析器中的 known bug。您应该升级到最新版本的 JavaScript 插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2018-01-14
    • 2012-01-12
    • 2018-04-02
    • 2013-10-27
    • 2021-05-06
    • 2021-03-15
    相关资源
    最近更新 更多