版本

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 中引入。

资源

更改语言