版本

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 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 中引入。

資源

變更語言