# 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
语句中使用赋值运算符,那么您可以安全地禁用此规则。