Skip to content
← Back to rules

eslint/no-constant-binary-expression 正确性

This rule is turned on by default.

它做了什么

禁止那些操作不会影响结果值的表达式

为什么这是不好的?

总是求值为 truefalse 的比较,以及逻辑表达式(||&&??)中总是短路或从不短路的情况,都可能是程序员错误的迹象。

这类错误在复杂的表达式中尤为常见,因为运算符优先级容易被误判。

此外,该规则还会检测对新创建的对象/数组/函数等的比较。在 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

参考资料