相同操作数¶
ID: js/redundant-operation
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- reliability
- correctness
- external/cwe/cwe-480
- external/cwe/cwe-561
Query suites:
- javascript-security-and-quality.qls
许多算术或逻辑运算符在应用于相同操作数时会产生微不足道的结果:例如,x-x
如果 x
是一个数字,则会产生零,否则会产生 NaN
;x&&x
始终等于 x
。这种代码通常是由于打字错误造成的,例如拼写错误的变量名称。即使是故意的(例如,依赖副作用),这种代码也很难阅读和理解,应该避免。
建议¶
检查操作数是否有打字错误。用更清晰的替代方案替换具有副作用的相同操作数的故意使用。
示例¶
在下面的示例中,函数 avg
旨在计算两个数字 x
和 y
的平均值。但是,程序员不小心使用了两次 x
,因此该函数只返回 x
function avg(x, y) {
return (x + x)/2;
}
可以通过更正打字错误来解决此问题
function avg(x, y) {
return (x + y)/2;
}
在某些情况下,看起来冗余的表达式实际上由于副作用而无法简化。例如,f() && f()
不一定等效于 f()
,因为 f
可能具有副作用。但是,读者可能不会立即意识到这一点,通常用 'if' 语句扩展此表达式更清晰
if (f())
f();