Javascript IF(声纳假阳性?)

时间:2019-02-11 15:18:54

标签: javascript sonarqube

我刚刚在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中,则代码将在两种情况下继续:   -如果同时设置了两个变量,或者两个变量都为null,但是if (null, null)应该返回undefined,不是吗?

感谢您的澄清

1 个答案:

答案 0 :(得分:1)

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

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

然后,SonarQube在第三条role语句的情况下突出显示if并引发以下问题:重构此代码,以使该表达式并不总是等于true。

searchQuery为真且role为假时,第二条if语句的条件为true,并执行第二条return语句。 这意味着在第三条role语句的情况下,当searchQuery为真时,if不能为假。换句话说,可以从第三条role语句的条件中删除if,而不会影响行为。