选择一个版本将带您到所选版本的 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 中引入。

资源

主题切换器

选择一种语言将带您到该语言的 ESLint 网站。