# 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() {
    return foo = bar + 2;
}

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

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

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

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

默认 "except-parens" 选项的正确代码示例:

/*eslint no-return-assign: "error"*/

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

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

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

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

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

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

# always

此选项不允许 return 语句中的所有赋值。所有作业都被视为问题。

"always" 选项的错误代码示例:

/*eslint no-return-assign: ["error", "always"]*/

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

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

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

"always" 选项的正确代码示例:

/*eslint no-return-assign: ["error", "always"]*/

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

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

# 何时不使用

如果您想允许在 return 语句中使用赋值运算符,那么您可以安全地禁用此规则。

Last Updated: 5/13/2023, 8:55:38 PM