no-return-assign
Disallow assignment operators in return
statements
JavaScript 的一个有趣的、有时令人困惑的方面是,赋值几乎可以发生在任何地方。正因为如此,一个错误的等号可能会导致赋值,而真正的意图是做一个比较。这在使用 return
语句时尤其如此。比如:
function doSomething() {
return foo = bar + 2;
}
很难说清这里的 return
语句的意图是什么。有可能该函数的目的是返回 bar + 2
的结果,但为什么要将其赋值给 foo
?也有可能是为了使用一个比较运算符,如 ==
,这段代码是一个错误。
由于这种模糊性,一般不在 return
语句中进行赋值。
规则细节
这条规则的目的是消除 return
语句中的赋值。因此,只要发现有赋值作为 return
的一部分,它就会发出警告。
选项
规则需要一个选项,即一个字符串,它必须包含以下值之一:
except-parens
(默认值):不允许赋值,除非它们被括在括号内。always
:不允许所有的赋值。
except-parens
这是默认的选项。 它不允许赋值,除非它们被括在括号中。
使用默认的 "except-parens"
选项的错误示例:
Open in Playground
/*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"
选项的正确示例:
Open in Playground
/*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"
选项的错误示例:
Open in Playground
/*eslint no-return-assign: ["error", "always"]*/
function doSomething() {
return foo = bar + 2;
}
function doSomething() {
return foo += 2;
}
function doSomething() {
return (foo = bar + 2);
}
使用 "always"
选项的正确示例:
Open in Playground
/*eslint no-return-assign: ["error", "always"]*/
function doSomething() {
return foo == bar + 2;
}
function doSomething() {
return foo === bar + 2;
}
何时不用
如果你想允许在 return
语句中使用赋值运算符,你可以安全地禁用此规则。
Version
This rule was introduced in ESLint v0.0.9.