首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

consistent-return

与强制函数返回指定类型的值的静态类型语言不同,JavaScript 允许函数中的不同代码路径返回不同类型的值。

JavaScript 的一个令人困惑的方面是,undefined如果满足以下任一条件,函数将返回:

  • return在退出之前不执行语句
  • 它执行时return没有明确指定一个值
  • 它执行 return undefined
  • 它执行return void后跟一个表达式(例如,一个函数调用)
  • 它执行return之后是任何其他表达式,评估为undefined

如果某个函数中的任何代码路径显式返回一个值,但某些代码路径不会显式返回值,则可能是输入错误,特别是在大型函数中。在以下示例中:

  • 通过该函数的代码路径返回一个 Boolean 值 true
  • 另一个代码路径不显式返回值,因此隐式返回undefined
代码语言:javascript
复制
function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}

规则细节

规则要求return语句总是或永远不指定值。此规则忽略名称以大写字母开头的函数定义,因为构造函数(当用new运算符调用时)隐式返回实例化对象,如果它们不显式返回另一个对象。

规则的错误代码示例:

代码语言:javascript
复制
/*eslint consistent-return: "error"*/

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}

function doSomething(condition) {
    if (condition) {
        return true;
    }
}

规则的正确代码示例:

代码语言:javascript
复制
/*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 }规则的默认代码错误代码示例:

代码语言:javascript
复制
/*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 }规则的错误代码示例包含以下选项:

代码语言:javascript
复制
/*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 }规则的正确代码示例包含以下选项:

代码语言:javascript
复制
/*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 0.4.0中引入的。

资源

扫码关注腾讯云开发者

领取腾讯云代金券