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":
/*eslint no-return-assign: "error"*/
function doSomething() {
}
function doSomethingElse() {
}
const foo =
const bar =
function doSomethingMore() {
}
Примеры корректного кода для параметра по умолчанию "except-parens":
/*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":
/*eslint no-return-assign: ["error", "always"]*/
function doSomething() {
}
function doSomethingElse() {
}
function doSomethingMore() {
}
Примеры корректного кода для параметра "always":
/*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