我刚刚在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,不是吗?
感谢您的澄清
答案 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
,而不会影响行为。