缺少“ .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
使用形式为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]
}
参考资料¶
Mozilla 开发者网络:Array.length