consistent-return
要求 `return` 语句始终或从不指定值
与强制函数返回指定类型值的静态类型语言不同,JavaScript 允许函数中的不同代码路径返回不同类型的值。
JavaScript 中一个令人困惑的方面是,如果满足以下任何条件,函数将返回 `undefined`
- 它在退出之前没有执行 `return` 语句
- 它执行 `return` 但没有显式指定值
- 它执行 `return undefined`
- 它执行 `return void` 后跟一个表达式(例如,函数调用)
- 它执行 `return` 后跟任何其他计算结果为 `undefined` 的表达式
如果函数中的任何代码路径都显式地返回值,但某些代码路径没有显式地返回值,则这可能是一个类型错误,尤其是在大型函数中。在以下示例中
- 一条通过函数的代码路径返回布尔值 `true`
- 另一条代码路径没有显式地返回值,因此隐式地返回 `undefined`
function doSomething(condition) {
if (condition) {
return true;
} else {
return;
}
}
规则详情
此规则要求 `return` 语句始终或从不指定值。此规则忽略名称以大写字母开头的函数定义,因为构造函数(当使用 `new` 运算符调用时)如果未显式返回另一个对象,则会隐式返回实例化的对象。
此规则的错误代码示例
在游乐场中打开
/*eslint consistent-return: "error"*/
function doSomething(condition) {
if (condition) {
return true;
} else {
}
}
function (condition) {
if (condition) {
return true;
}
}
此规则的正确代码示例
在游乐场中打开
/*eslint consistent-return: "error"*/
function doSomething(condition) {
if (condition) {
return true;
} else {
return false;
}
}
function Foo() {
if (!(this instanceof Foo)) {
return new Foo();
}
this.a = 0;
}
选项
此规则有一个对象选项
"treatUndefinedAsUnspecified": false
(默认值)始终要么指定值,要么仅隐式返回 `undefined`。"treatUndefinedAsUnspecified": true
始终要么指定值,要么显式或隐式返回 `undefined`。
treatUndefinedAsUnspecified
使用默认的 { "treatUndefinedAsUnspecified": false }
选项时,此规则的错误代码示例
在游乐场中打开
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/
function (callback) {
if (callback) {
return void callback();
}
// no return statement
}
function (condition) {
if (condition) {
return undefined;
}
// no return statement
}
使用 { "treatUndefinedAsUnspecified": true }
选项时,此规则的错误代码示例
在游乐场中打开
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
function foo(callback) {
if (callback) {
return void callback();
}
}
function bar(condition) {
if (condition) {
return undefined;
}
}
使用 { "treatUndefinedAsUnspecified": true }
选项时,此规则的正确代码示例
在游乐场中打开
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
function foo(callback) {
if (callback) {
return void callback();
}
// no return statement
}
function bar(condition) {
if (condition) {
return undefined;
}
// no return statement
}
何时不使用它
如果要允许函数根据代码分支具有不同的 `return` 行为,则可以安全地禁用此规则。
版本
此规则是在 ESLint v0.4.0 中引入的。