no-constant-binary-expression
Запрещает выражения, где операция не влияет на значение
Использование конфигурации recommended из @eslint/js в файле конфигурации включает эту проверку
Сравнения, которые всегда будут оцениваться как истинными или ложными, и логические выражения (||, &&, ??), которые либо всегда, либо никогда не выполняются по короткой схеме, являются признаками возможной ошибки программиста.
Эти ошибки особенно часто встречаются в сложных выражениях, где легко ошибиться с приоритетом операторов. Например:
// 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.
Также оно определяет ||, && и ?? логические выражения, которые либо всегда, либо никогда не будут выполняться по короткой схеме.
Примеры некорректного кода для этого правила:
/*eslint no-constant-binary-expression: "error"*/
const value1 = == null;
const value2 = condition ? x : || DEFAULT;
const value3 = == null;
const value4 = === true;
const objIsEmpty = someObj === ;
const arrIsEmpty = someArr === ;
const shortCircuit1 = && condition2;
const shortCircuit2 = || condition2;
const shortCircuit3 = ?? condition2;
Примеры корректного кода для этого правила:
/*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.
Дополнительные материалы
Ссылки
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-constant-binary-expression