跳至内容

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

此规则默认启用。

功能概述

禁止操作符本身不会影响结果的表达式

为什么会有问题?

始终求值为 true 或 false 的比较以及始终短路或从不短路的逻辑表达式 (||&&??) 都可能是程序员错误的迹象。

这些错误在 operator precedence 易于错误判断的复杂表达式中尤其常见。

此外,此规则会检测对新创建对象/数组/函数/等的比较。在对象通过引用进行比较的 JavaScript 中,新创建的对象永远不能 === 任何其他值。对于习惯了对象通过值进行比较的语言的程序员来说,这可能会让人感到意外。

示例

javascript
// One might think this would evaluate as `a + (b ?? c)`:
const x = a + b ?? c;

// But it actually evaluates as `(a + b) ?? c`. Since `a + b` can never be null,
// the `?? c` has no effect.

// Programmers coming from a language where objects are compared by value might expect this to work:
const isEmpty = x === [];

// However, this will always result in `isEmpty` being `false`.

参考

遵循 MIT 许可证发布。