---
url: /docs/guide/usage/linter/rules/eslint/no-constant-binary-expression.md
---

### 作用

禁止不会影响值的表达式。

### 为什么不好？

始终求值为 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;
```

## 配置

此规则接受一个包含以下属性的配置对象：

### checkRelationalComparisons

类型：`boolean`

默认值：`true`

## 使用方法

## 版本

此规则在 v0.0.3 中添加。

## 参考资料
