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
var x;
if (x = 0) {
    var b = 1;
}

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

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

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

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

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

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

always

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

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

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

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

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

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

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

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

// Assignment replaced by comparison
var x;
if (x === 0) {
    var 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