CodeQL 文档

表达式没有效果

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

点击查看 CodeQL 代码库中的查询

没有效果(例如更改变量值或产生输出)的表达式出现在其值被忽略的上下文中,可能表示缺少代码或潜在错误。

建议

仔细检查表达式,以确保它不是错误的症状。为了记录表达式值的故意忽略,请将其包装到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 = {};
}

参考

  • ©2025GitHub, Inc.
  • 条款
  • 隐私