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