CodeQL 文档

空格与运算符优先级相矛盾

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

点击查看 CodeQL 代码库中的查询

嵌套表达式中,运算符周围的空格暗示了一种与 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.

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