嵌套运算符优先级不明确¶
ID: js/unclear-operator-precedence
Kind: problem
Security severity:
Severity: recommendation
Precision: very-high
Tags:
- maintainability
- correctness
- statistical
- non-attributable
- external/cwe/cwe-783
Query suites:
- javascript-security-and-quality.qls
依赖于不太为人知的运算符优先级规则的嵌套表达式可能难以阅读和理解。它们甚至可能表明代码作者误解了优先级规则,从而导致错误。
建议¶
使用括号或额外的空格来澄清分组。
示例¶
请考虑以下代码片段
if (x & y == 0) {
// ...
}
它看起来像是测试x
和y
是否有任何共同的位,但实际上==
比&
绑定得更紧密,因此该测试等效于x & (y == 0)
。
如果这是预期的解释,则应使用括号来澄清这一点。你也可以考虑在&
周围添加额外的空格,或者删除==
周围的空格,以使其在视觉上明显地表明它绑定得不太紧密:x & y==0
。
但是,在这种情况下,最好的方法可能是使用&&
运算符来澄清预期的解释:x && y == 0
。