版本

no-useless-assignment

禁止变量赋值时未使用该值

维基百科将“死存储”描述如下

在计算机编程中,一个局部变量被赋值但随后没有被任何指令读取,被称为死存储

“死存储”浪费了处理和内存,因此最好删除不必要的变量赋值。

此外,如果作者打算使用该变量,则死存储周围可能存在错误。例如,

  • 您应该使用了存储的值,但忘记了这样做。
  • 您在要存储的变量的名称上犯了一个错误。
let id = "x1234";    // this is a "dead store" - this value ("x1234") is never read

id = generateId();

doSomethingWith(id);

规则详情

此规则旨在报告变量赋值时未使用该值的情况。

此规则的错误代码示例

在 Playground 中打开
/* 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);
}

此规则的正确代码示例

在 Playground 中打开
/* 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 规则。

在 Playground 中打开
/* eslint no-useless-assignment: "error" */

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

何时不使用它

如果您不想收到有关从未读取的值的通知,可以安全地禁用此规则。

版本

此规则是在 ESLint v9.0.0-alpha.1 中引入的。

进一步阅读

资源

更改语言