CodeQL 文档

缺少“ .length”的比较

ID: js/missing-dot-length-in-comparison
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - correctness
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

使用形式为i < array.length 的比较来检查数字是否在数组或字符串的边界内,并在之后执行索引访问array[i],这很常见。如果此比较被误写为i < array,则会执行类型强制转换,这几乎不会产生预期的效果。

建议

检查操作数之一是否是数组或字符串,并确保与它的length 进行比较,而不是与值本身进行比较。

示例

以下示例显示了误写的循环条件i < array

for (var i = 0; i < array; ++i) {
    count += array[i]
}

如果上面代码在array 设置为[3,5,7] 时执行,则循环根本不会运行。可以通过将循环条件更改为i < array.length 来更正错误。

for (var i = 0; i < array.length; ++i) {
    count += array[i]
}

参考资料

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