我正在针对旧应用程序运行SonarQube。它标记了我认为是误报的JavaScript中的某些内容(不是TypeScript或任何花哨的现代内容,只是普通的旧JavaScript),但我不确定百分百。看起来像这个最小的示例:
var foo=null;
var bar=["a","b","c","foobar"]
for(var i=0; i<bar.length; i++) {
if(bar[i] == "foobar") {
foo = i;
}
}
它在foo = i行上标记;说我们应该使用“ var”来声明foo,但是您可以看到foo是先前声明的。这是一些怪异的JavaScript作用域的东西,我是否需要再次使用var?还是我可以将其标记为误报然后继续?
(实际的应用程序正在按预期运行,但是我们被要求阅读并以某种方式解决SonarQube的所有发现。)
这是另一个最小的示例,您可能会发现更合理的示例……它在许多类似的示例上都进行了标记(请记住,该应用程序很旧,我们并没有真正美化它,实际上至少是前端 < / em>将在不久的将来被完全重写),其中许多确实很简单,例如:
var isFoobar=false;
var bar=["foo","foobar"];
for(var i=0; i<bar.length; i++) {
if(bar[i] == "foobar") {
isFoobar = true;
}
// if baz, set isBaz variable
// if buzz, set isBuzz variable
// etc. etc. for many more
}
// do something with isFoobar, isBaz, isBuzz, etc., down here
看起来很疯狂,诸如“ indexOf”之类的东西在编写时就没有出现(最初支持IE 8或更早版本,并且从未升级过,只是继续以“旧版模式”在IE中运行)。 >
答案 0 :(得分:0)
这是一个错误的肯定-您可以使用以下方法清除问题:
var foo = ["a","b","c","foobar"].lastIndexOf("foobar");
foo = foo < 0 ? null : foo;