【发布时间】:2019-07-05 03:10:37
【问题描述】:
我刚刚在 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) 标记了最后一个如果作为评论问题,应该修复它以避免每次都出现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?
因为我不这么认为,注册。测试数据。
如果您将 return 放置在前两个 IF 中,则代码将在两种情况下继续: - 如果两个变量都设置了,或者两者都为空,但
if (null, null)应该返回未定义,不是吗?
感谢您的澄清
【问题讨论】:
-
在没有看到您的实际代码的情况下,可能是 sonarqube 正在检测(可能是错误的)当代码通过您的前两个 IF 时,另一个 IF 是不必要的,尤其是在您返回时。跨度>
-
啊,这可能是个问题,因为当代码通过第三个 if 时,有一个“通用”返回,实际上是另一个值,然后所有之前的 if 都有,但是是的,可能来自从扫描仪的角度来看,结果是这样的,无论如何感谢您的想法
标签: javascript sonarqube