版本

no-useless-assignment

當值未使用時,不允許變數賦值

維基百科將「無效儲存」描述如下

在電腦程式設計中,一個被賦予值但沒有被任何後續指令讀取的局部變數被稱為無效儲存

「無效儲存」會浪費處理和記憶體,因此最好移除對變數不必要的賦值。

此外,如果作者打算使用該變數,則該無效儲存很可能存在錯誤。 例如,

  • 您應該使用已儲存的值但忘記這樣做了。
  • 您在要儲存的變數名稱中犯了錯誤。
let id = "x1234";    // this is a "dead store" - this value ("x1234") is never read

id = generateId();

doSomethingWith(id);

規則詳細資訊

此規則旨在回報未使用值的變數賦值。

此規則的不正確程式碼範例

在線上試驗場開啟
/* eslint no-useless-assignment: "error" */

function fn1() {
    let v = 'used';
    doSomething(v);
    v = 'unused';
}

function fn2() {
    let v = 'used';
    if (condition) {
        v = 'unused';
        return
    }
    doSomething(v);
}

function fn3() {
    let v = 'used';
    if (condition) {
        doSomething(v);
    } else {
        v = 'unused';
    }
}

function fn4() {
    let v = 'unused';
    if (condition) {
        v = 'used';
        doSomething(v);
        return
    }
}

function fn5() {
    let v = 'used';
    if (condition) {
        let v = 'used';
        console.log(v);
        v = 'unused';
    }
    console.log(v);
}

此規則的正確程式碼範例

在線上試驗場開啟
/* eslint no-useless-assignment: "error" */

function fn1() {
    let v = 'used';
    doSomething(v);
    v = 'used-2';
    doSomething(v);
}

function fn2() {
    let v = 'used';
    if (condition) {
        v = 'used-2';
        doSomething(v);
        return
    }
    doSomething(v);
}

function fn3() {
    let v = 'used';
    if (condition) {
        doSomething(v);
    } else {
        v = 'used-2';
        doSomething(v);
    }
}

function fn4() {
    let v = 'used';
    for (let i = 0; i < 10; i++) {
        doSomething(v);
        v = 'used in next iteration';
    }
}

此規則不會回報從未讀取的變數。 因為它顯然是一個未使用的變數。 如果您希望回報它,請啟用 no-unused-vars 規則。

在線上試驗場開啟
/* eslint no-useless-assignment: "error" */

function fn() {
    let v = 'unused';
    v = 'unused-2'
    doSomething();
}

何時不使用它

如果您不想收到有關從未讀取的值的通知,您可以安全地停用此規則。

版本

此規則已在 ESLint v9.0.0-alpha.1 中引入。

進一步閱讀

資源

變更語言