no-unreachable
不允許在 return
、throw
、continue
和 break
語句之後出現無法執行的程式碼
✅ 建議
在設定檔中使用來自 @eslint/js
的 recommended
設定會啟用此規則
由於 return
、throw
、continue
和 break
語句會無條件地退出程式碼區塊,因此它們之後的任何語句都無法執行。無法執行的語句通常是錯誤。
function fn() {
x = 1;
return x;
x = 3; // this will never execute
}
另一種錯誤是在子類別中定義實例欄位,而其建構子沒有呼叫 super()
。子類別的實例欄位僅在 super()
之後才會新增至實例。如果沒有 super()
呼叫,則它們的定義永遠不會套用,因此是無法執行的程式碼。
class C extends B {
#x; // this will never be added to instances
constructor() {
return {};
}
}
規則詳細資訊
此規則不允許在 return
、throw
、continue
和 break
語句之後出現無法執行的程式碼。此規則也會標記沒有 super()
呼叫的建構子中的子類別的實例欄位的定義。
此規則的錯誤程式碼範例
在遊樂場中開啟
/*eslint no-unreachable: "error"*/
function foo() {
return true;
}
function bar() {
throw new Error("Oops!");
}
while(value) {
break;
}
throw new Error("Oops!");
function baz() {
if (Math.random() < 0.5) {
return;
} else {
throw new Error();
}
}
此規則的正確程式碼範例,因為 JavaScript 的函式和變數提升
在遊樂場中開啟
/*eslint no-unreachable: "error"*/
function foo() {
return bar();
function bar() {
return 1;
}
}
function bar() {
return x;
var x;
}
switch (foo) {
case 1:
break;
var x;
}
此規則的其他錯誤程式碼範例
在遊樂場中開啟
/*eslint no-unreachable: "error"*/
class C extends B {
// unreachable
constructor() {
return {};
}
}
此規則的其他正確程式碼範例
在遊樂場中開啟
/*eslint no-unreachable: "error"*/
class D extends B {
#x;
#y = 1;
a;
b = 1;
constructor() {
super();
}
}
class E extends B {
#x;
#y = 1;
a;
b = 1;
// implicit constructor always calls `super()`
}
class F extends B {
static #x;
static #y = 1;
static a;
static b = 1;
constructor() {
return {};
}
}
由 TypeScript 處理
當使用 TypeScript 時,停用此規則是安全的,因為 TypeScript 的編譯器會強制執行此檢查。
必須將 TypeScript 設定為 allowUnreachableCode: false
,才會將無法執行的程式碼視為錯誤。
版本
此規則在 ESLint v0.0.6 中引入。