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

function doSomething(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 行为,那么禁用此规则是安全的。

Last Updated: 5/13/2023, 8:55:38 PM