Spec-Zone.ru › ESLint

no-cond-assign

Запрещает операторы присваивания в условных выражениях

✅ Рекомендуется

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

В условных операторах очень легко по ошибке написать оператор сравнения (например, ==) вместо оператора присваивания (например, =). Например:

// Check the user's job title
if (user.jobTitle = "manager") {
    // user.jobTitle is now incorrect
}

Существуют веские причины использовать операторы присваивания в условных операторах. Однако бывает сложно понять, было ли конкретное присваивание намеренным.

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

Это правило запрещает неоднозначные операторы присваивания в условиях проверки операторов if, for, while и do...while.

Параметры

У этого правила есть строковый параметр:

  • "except-parens" (по умолчанию) разрешает присваивания в условиях проверки только в том случае, если они заключены в скобки (например, чтобы разрешить повторное присваивание переменной в условии цикла while или do...while).
  • "always" запрещает все присваивания в условиях проверки.

except-parens

Примеры неправильного кода для этого правила с параметром "except-parens" по умолчанию:

Открыть в Playground
/*eslint no-cond-assign: "error"*/

// Unintentional assignment
let x;
if (x = 0) {
    const b = 1;
}

// Practical example that is similar to an error
const setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while (someNode = someNode.parentNode);
}

Примеры правильного кода для этого правила с параметром "except-parens" по умолчанию:

Открыть в Playground
/*eslint no-cond-assign: "error"*/

// Assignment replaced by comparison
let x;
if (x === 0) {
    const b = 1;
}

// Practical example that wraps the assignment in parentheses
const setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode));
}

// Practical example that wraps the assignment and tests for 'null'
const set_height = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode) !== null);
}

always

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

Открыть в Playground
/*eslint no-cond-assign: ["error", "always"]*/

// Unintentional assignment
let x;
if (x = 0) {
    const b = 1;
}

// Practical example that is similar to an error
const setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while (someNode = someNode.parentNode);
}

// Practical example that wraps the assignment in parentheses
const set_height = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode));
}

// Practical example that wraps the assignment and tests for 'null'
const heightSetter = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode) !== null);
}

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

Открыть в Playground
/*eslint no-cond-assign: ["error", "always"]*/

// Assignment replaced by comparison
let x;
if (x === 0) {
    const b = 1;
}

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

  • no-extra-parens

Версия

Это правило появилось в ESLint v0.0.9.

Ресурсы

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

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

Spec-Zone.ru

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