no-constant-binary-expression

禁止操作不影响值的表达式

Recommended

配置文件 中使用来自 @eslint/jsrecommended 配置可以启用此规则

将始终评估为真或假的比较以及始终短路或从不短路的逻辑表达式(||&&??)都可能表明程序员错误。

¥Comparisons which will always evaluate to true or false and logical expressions (||, &&, ??) which either always short-circuit or never short-circuit are both likely indications of programmer error.

这些错误在运算符优先级容易误判的复杂表达式中尤为常见。例如:

¥These errors are especially common in complex expressions where operator precedence is easy to misjudge. For example:

// 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.

此外,此规则检测与新构造的对象/数组/函数/等的比较。在 JavaScript 中,对象通过引用进行比较,新构造的对象永远不能 === 任何其他值。对于来自按值比较对象的语言的程序员来说,这可能会令人惊讶。

¥Additionally, this rule detects comparisons to newly constructed objects/arrays/functions/etc. In JavaScript, where objects are compared by reference, a newly constructed object can never === any other value. This can be surprising for programmers coming from languages where objects are compared by value.

// 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`.

规则详情

¥Rule Details

此规则识别 ===== 比较,基于 JavaScript 语言的语义,它们将始终评估为 truefalse

¥This rule identifies == and === comparisons which, based on the semantics of the JavaScript language, will always evaluate to true or false.

它还标识了总是或从不短路的 ||&&?? 逻辑表达式。

¥It also identifies ||, && and ?? logical expressions which will either always or never short-circuit.

此规则的错误代码示例:

¥Examples of incorrect code for this rule:

在线运行
/*eslint no-constant-binary-expression: "error"*/

const value1 = +x == null;

const value2 = condition ? x : {} || DEFAULT;

const value3 = !foo == null;

const value4 = new Boolean(foo) === true;

const objIsEmpty = someObj === {};

const arrIsEmpty = someArr === [];

const shortCircuit1 = condition1 && false && condition2;

const shortCircuit2 = condition1 || true || condition2;

const shortCircuit3 = condition1 ?? "non-nullish" ?? condition2;

此规则的正确代码示例:

¥Examples of correct code for this rule:

在线运行
/*eslint no-constant-binary-expression: "error"*/

const value1 = x == null;

const value2 = (condition ? x : {}) || DEFAULT;

const value3 = !(foo == null);

const value4 = Boolean(foo) === true;

const objIsEmpty = Object.keys(someObj).length === 0;

const arrIsEmpty = someArr.length === 0;

版本

此规则是在 ESLint v8.14.0 中引入。

进阶读物

资源

ESLint 中文网
粤ICP备13048890号