eslint/no-constant-binary-expression 正确性
它做了什么
禁止那些操作不会影响结果值的表达式
为什么这是不好的?
总是求值为 true 或 false 的比较,以及逻辑表达式(||、&&、??)中总是短路或从不短路的情况,都可能是程序员错误的迹象。
这类错误在复杂的表达式中尤为常见,因为运算符优先级容易被误判。
此外,该规则还会检测对新创建的对象/数组/函数等的比较。在 JavaScript 中,对象是通过引用进行比较的,因此新创建的对象永远不可能与任何其他值相等(===)。这对来自以值比较对象的语言的程序员来说可能会感到意外。
示例
此规则的错误代码示例:
javascript
// 可能会误以为这会计算为 `a + (b ?? c)`:
const x = a + b ?? c;
// 但实际上它计算为 `(a + b) ?? c`。由于 `a + b` 永远不会为 null,
// 因此 `?? c` 不会产生任何效果。
// 来自以值比较对象的语言的程序员可能期望这个逻辑成立:
const isEmpty = x === [];
// 然而,这将始终导致 `isEmpty` 为 `false`。此规则的正确代码示例:
javascript
const x = a + (b ?? c);
const isEmpty = x.length === 0;如何使用
要通过配置文件或 CLI 启用此规则,可以使用:
json
{
"rules": {
"no-constant-binary-expression": "error"
}
}bash
oxlint --deny no-constant-binary-expression