javascript - 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)
应该返回未定义,不是吗?
感谢您的任何澄清
解决方案
如果您提供实际分析的代码以及您在 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
真时不能是假的。换句话说,可以从条件中移除第三条语句而不影响行为。searchQuery
if
role
if