Javascript IFs(声纳假阳性?)

Javascript IFs(声纳假阳性?),javascript,sonarqube,Javascript,Sonarqube,我刚刚在SonarQube中发现了一个误导性的问题, 我们有如下代码 {…} function test(searchQuery, role) { console.log("inputs: " +searchQuery + ", " + role ); if (!searchQuery && role) { console.log("first"); } if (searchQuery && !role) {

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

{…}
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问题,应修复该问题,以避免每次都是真的 在第一个IFs中有一个返回,事实上,我修改了代码以进行测试

根据测试值,输出为:

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每次都是真的? 因为我不这么认为,雷格。测试数据

如果您将返回放入前两个待执行的IFs中,则代码将在两种情况下继续: -如果两个变量都设置了,或者都为null,但是如果为null,null应该返回undefined,不是吗


感谢您的澄清

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

function test(searchQuery, role) {
    if (!searchQuery && role) {
        return;
    }
    if (searchQuery && !role) {
        return;
    }
    if (searchQuery && role) {
        return;
    }
}
SonarQube然后强调了在第三个if语句中的角色,并提出了以下问题:重构此代码,使此表达式的计算结果不总是为true

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

如果看不到您的实际代码,sonarqube可能错误地检测到,当代码通过前两个if时,另一个if是不必要的,尤其是当您返回时。啊,也许这是个问题,因为当代码通过第三个if时,有一个通用的返回,实际上有另一个值,那么所有以前的ifs都有,但是是的,可能从扫描仪的角度来看,结果是这样的,无论如何,感谢ideaHi,Pierre,感谢解释,这正是问题所在,但是如果我是正确的,然后-在两个变量都设置为false值的情况下调用函数,然后第一个变量不匹配,第二个变量也不匹配,但第三个变量也不匹配,不是吗?在这种情况下,如果我是正确的,或者我遗漏了什么,代码将继续在下面避免IF块的所有条件?SonarQube并不意味着第三个IF语句的完整条件总是正确的。这里只有角色子条件是多余的,可以在不影响行为的情况下删除:如果searchQuery{…}啊,我想我得到了它,所以从技术上讲,它只可能测试第一个searchQuery参数,因为上面的代码已经测试了这两种情况。所以,正如您所提到的,一旦代码到达那个里,就意味着角色已经是真的了。谢谢你的澄清,祝你度过愉快的一天。