首页 > 解决方案 > Javascript IF(声纳误报?)

问题描述

我刚刚在 SonarQube 中发现了一个误导性问题,我们的代码如下(JS)

{…}
function test(searchQuery, role) {

console.log("inputs: " +searchQuery + ", " + role );
    if (!searchQuery && role) {
        console.log("first");
    }
    if (searchQuery && !role) {
        console.log("sec");
    }
    if (searchQuery && role) {
        console.log("3");
    }
    console.log("END");
}
{…}

并且 Sonarqube (6.7.4) 将最后一个 If 标记为带有注释的问题,它应该被修复以避免每次true 都出现(实际上在第一个 IF 中有一个返回,我修改了代码以用于测试目的)

使用测试值,输出为:

inputs: aaa, fff
test.txt.html:14 3
test.txt.html:16 END
test.txt.html:6 inputs: null, fff
test.txt.html:8 first
test.txt.html:16 END
test.txt.html:6 inputs: null, null
test.txt.html:16 END

我不是 javascript 专家,只是觉得很有趣,有人知道if there is any reason why the last if should be everytime true吗?因为我不这么认为,注册。测试数据。

如果您将返回放置在前两个 IF 中,那么代码将在两种情况下继续: - 如果两个变量都已设置,或者如果两者都为空,但if (null, null)应该返回未定义,不是吗?

感谢您的任何澄清

标签: javascriptsonarqube

解决方案


如果您提供实际分析的代码以及您在 SonarQube 中遇到的确切问题,则更容易为您提供帮助。我无法重现您发布的代码的任何问题,但我可以return在每个块中重现一个带有语句的问题if(基于您消息末尾的注释)。

function test(searchQuery, role) {
    if (!searchQuery && role) {
        return;
    }
    if (searchQuery && !role) {
        return;
    }
    if (searchQuery && role) {
        return;
    }
}

SonarQube 然后role在第三条if语句的条件中突出显示并引发以下问题:重构此代码,以便此表达式不总是评估为真。

searchQuery为真和role假时,第二条if语句的条件为真,return执行第二条语句。这意味着在第三个陈述的条件下为role真时不能是假的。换句话说,可以从条件中移除第三条语句而不影响行为。searchQueryifroleif


推荐阅读