版本

no-unreachable

不允許在 returnthrowcontinuebreak 語句之後出現無法執行的程式碼

建議

設定檔中使用來自 @eslint/jsrecommended 設定會啟用此規則

由於 returnthrowcontinuebreak 語句會無條件地退出程式碼區塊,因此它們之後的任何語句都無法執行。無法執行的語句通常是錯誤。

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

規則詳細資訊

此規則不允許在 returnthrowcontinuebreak 語句之後出現無法執行的程式碼。此規則也會標記沒有 super() 呼叫的建構子中的子類別的實例欄位的定義。

此規則的錯誤程式碼範例

在遊樂場中開啟
/*eslint no-unreachable: "error"*/

function foo() {
    return true;
    console.log("done");
}

function bar() {
    throw new Error("Oops!");
    console.log("done");
}

while(value) {
    break;
    console.log("done");
}

throw new Error("Oops!");
console.log("done");

function baz() {
    if (Math.random() < 0.5) {
        return;
    } else {
        throw new Error();
    }
    console.log("done");
}

for (;;) {}
console.log("done");

此規則的正確程式碼範例,因為 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 {
    #x; // unreachable
    #y = 1; // unreachable
    a; // unreachable
    b = 1; // 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 中引入。

資源

變更語言