Spec-Zone.ru › ESLint

no-return-assign

Запретить операторы присваивания в return операторах

Одна из интересных, и порой запутанных, особенностей JavaScript заключается в том, что присваивание может происходить практически в любой точке кода. Из-за этого случайный знак равенства может привести к присваиванию, когда на самом деле нужно сравнение. Это особенно актуально при использовании оператора return. Например:

function doSomething() {
    return foo = bar + 2;
}

Трудно определить намерение return оператора в данном случае. Возможно, функция должна возвращать результат bar + 2, но тогда зачем присваивать значение foo? Также возможно, что предполагалось использовать оператор сравнения, например ==, и данный код содержит ошибку.

Из-за этой неоднозначности считается хорошей практикой не использовать присваивания в операторах return.

Подробное описание правила

Это правило направлено на устранение присваиваний из return операторов. Соответственно, оно будет предупреждать всякий раз, когда встречается присваивание в return.

Параметры

Правило принимает один параметр — строку, которая должна содержать одно из следующих значений:

  • except-parens (по умолчанию): Запретить присваивания, если они не заключены в скобки.
  • always: Запретить все присваивания.

except-parens

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

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

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

function doSomething() {
    return foo = bar + 2;
}

function doSomethingElse() {
    return foo += 2;
}

const foo = (a, b) => a = b

const bar = (a, b, c) => (a = b, c == b)

function doSomethingMore() {
    return foo = bar && foo > 0;
}

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

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

function doSomething() {
    return foo == bar + 2;
}

function doSomethingElse() {
    return foo === bar + 2;
}

function doSomethingMore() {
    return (foo = bar + 2);
}

const foo = (a, b) => (a = b)

const bar = (a, b, c) => ((a = b), c == b)

function doAnotherThing() {
    return (foo = bar) && foo > 0;
}

always

Этот параметр запрещает все присваивания в return операторах. Все присваивания рассматриваются как ошибки.

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

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

function doSomething() {
    return foo = bar + 2;
}

function doSomethingElse() {
    return foo += 2;
}

function doSomethingMore() {
    return (foo = bar + 2);
}

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

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

function doSomething() {
    return foo == bar + 2;
}

function doSomethingElse() {
    return foo === bar + 2;
}

Когда не следует использовать это правило

Если вы хотите разрешить использование операторов присваивания в операторе return , вы можете безопасно отключить это правило.

Версия

Это правило было добавлено в ESLint v0.0.9.

Ссылки

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

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

Spec-Zone.ru

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