版本

no-cond-assign

禁止在条件表达式中使用赋值运算符

推荐

配置文件中使用来自 @eslint/jsrecommended 配置将启用此规则

在条件语句中,很容易将比较运算符(如 ==)误写为赋值运算符(如 =)。例如

// Check the user's job title
if (user.jobTitle = "manager") {
    // user.jobTitle is now incorrect
}

在条件语句中使用赋值运算符有正当理由。但是,很难判断特定的赋值是否是故意的。

规则详细信息

此规则禁止在 ifforwhiledo...while 语句的测试条件中使用模棱两可的赋值运算符。

选项

此规则有一个字符串选项

  • "except-parens"(默认)允许在测试条件中进行赋值,但前提是 它们必须用括号括起来(例如,允许在 whiledo...while 循环的测试中重新分配变量)
  • "always" 禁止在测试条件中进行所有赋值

except-parens

使用默认 "except-parens" 选项时,此规则的不正确代码示例

在游乐场中打开
/*eslint no-cond-assign: "error"*/

// Unintentional assignment
var x;
if (x = 0) {
    var b = 1;
}

// Practical example that is similar to an error
var setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while (someNode = someNode.parentNode);
}

使用默认 "except-parens" 选项时,此规则的正确代码示例

在游乐场中打开
/*eslint no-cond-assign: "error"*/

// Assignment replaced by comparison
var x;
if (x === 0) {
    var b = 1;
}

// Practical example that wraps the assignment in parentheses
var setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode));
}

// Practical example that wraps the assignment and tests for 'null'
var setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode) !== null);
}

always

使用 "always" 选项时,此规则的不正确代码示例

在游乐场中打开
/*eslint no-cond-assign: ["error", "always"]*/

// Unintentional assignment
var x;
if (x = 0) {
    var b = 1;
}

// Practical example that is similar to an error
var setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while (someNode = someNode.parentNode);
}

// Practical example that wraps the assignment in parentheses
var setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode));
}

// Practical example that wraps the assignment and tests for 'null'
var setHeight = function (someNode) {
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode) !== null);
}

使用 "always" 选项时,此规则的正确代码示例

在游乐场中打开
/*eslint no-cond-assign: ["error", "always"]*/

// Assignment replaced by comparison
var x;
if (x === 0) {
    var b = 1;
}

版本

此规则是在 ESLint v0.0.9 中引入的。

资源

更改语言