版本

一致返回

要求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 {
        return;
    }
}

function doSomethingElse(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 foo(callback) {
    if (callback) {
        return void callback();
    }
    // no return statement
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    // no return statement
}

使用{ "treatUndefinedAsUnspecified": true }选项的此规则的不正确代码示例

在游乐场中打开
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/

function foo(callback) {
    if (callback) {
        return void callback();
    }
    return true;
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    return true;
}

使用{ "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 中引入的。

资源

更改语言