表达式没有效果¶
ID: js/useless-expression
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
- correctness
- external/cwe/cwe-480
- external/cwe/cwe-561
Query suites:
- javascript-security-and-quality.qls
没有效果(例如更改变量值或产生输出)的表达式出现在其值被忽略的上下文中,可能表示缺少代码或潜在错误。
建议¶
仔细检查表达式,以确保它不是错误的症状。为了记录表达式值的故意忽略,请将其包装到void
表达式中。
示例¶
以下代码片段访问 DOM 节点的selectedIndex
属性以触发 Safari 某些版本的额外处理。但是,代码本身并不清楚这一点,它看起来像是一个属性读取,其值立即被丢弃。
elem.parentNode.selectedIndex;
为了记录属性读取存在隐藏的副作用,并且其值被故意忽略,它应该被包装到void
表达式中,如下所示
void(elem.parentNode.selectedIndex);
警告的常见来源是构造函数,它们通过在表达式语句中简单地引用它来“声明”新构造对象的属性,而没有初始化它,如下所示
function Graph(nodes, edges) {
this.nodes = nodes;
this.edges = edges;
// cache minimum distance between pairs of nodes
this.distance;
}
从语义上讲,这是不必要的,因为属性将在首次赋值时被创建。如果目的是记录属性的存在,最好明确地为它分配一个初始值,这也用于记录它的预期类型
function Graph(nodes, edges) {
this.nodes = nodes;
this.edges = edges;
// cache minimum distance between pairs of nodes
this.distance = {};
}