空格与运算符优先级相矛盾¶
ID: js/whitespace-contradicts-precedence
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
- correctness
- statistical
- non-attributable
- external/cwe/cwe-783
Query suites:
- javascript-security-and-quality.qls
嵌套表达式中,运算符周围的空格暗示了一种与 JavaScript 运算符优先级规则所强制的不同的分组,这是有问题的:它们可能表明代码作者误解了优先级规则。即使没有错误,空格也可能对阅读代码的人造成混淆。
建议¶
确保运算符周围的空格反映运算符优先级,或使用括号来明确分组。
示例¶
考虑以下分配数组的代码片段
var a = new Array(capacity + capacity>>1);
这里,+
和 >>
周围的空格暗示了分组 capacity + (capacity>>1)
,也就是说,分配的数组应该比给定容量大 50%。
但是,+
的优先级高于 >>
,因此此代码分配了一个大小为 (capacity + capacity) >> 1
的数组,它与 capacity
相同。
要解决此问题,应使用括号,如下所示
var a = new Array(capacity + (capacity>>1));
参考资料¶
J. Bloch 和 N. Gafter,《Java 难题:陷阱、缺陷和边缘案例》,谜题 35。Addison-Wesley,2005。
常见弱点枚举:CWE-783.