Spec-Zone.ru › ESLint

no-constant-binary-expression

Запрет выражений, в которых операция не влияет на значение

✅ Рекомендуемое

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

Сравнения, результатом которых всегда будет true или false, и логические выражения (||, &&, ??), которые либо всегда прерывают вычисление, либо никогда его не прерывают, вероятнее всего, указывают на ошибку программиста.

Такие ошибки особенно часто встречаются в сложных выражениях, где легко неправильно оценить приоритет операторов. Например:

// 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, где объекты сравниваются по ссылке, только что созданный объект никогда не может === какое-либо другое значение. Это может удивить программистов, пришедших из языков, в которых объекты сравниваются по значению.

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

Описание правила

Это правило обнаруживает сравнения == и ===, которые, согласно семантике языка JavaScript, всегда будут иметь результат true или false.

Оно также обнаруживает логические выражения ||, && и ??, которые всегда или никогда прерывают вычисление.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*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;

Примеры правильного кода для этого правила:

Открыть в Playground
/*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;

Параметры

У этого правила нет параметров.

Связанные правила

  • no-constant-condition

Версия

Это правило добавлено в ESLint v8.14.0.

Дополнительные материалы

Интересные ошибки, обнаруженные правилом no-constant-binary-expression — ESLint — расширяемый линтер JavaScript
eslint.org

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-constant-binary-expression

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API