版本

logical-assignment-operators

要求或禁止逻辑赋值运算符简写

🔧 可修复

此规则报告的某些问题可以通过 --fix 命令行 选项自动修复

💡 有建议

此规则报告的某些问题可以通过编辑器 建议 手动修复

❄️ 已冻结

此规则目前处于冻结状态,不接受功能请求。

ES2021 引入了逻辑运算符 ||, &&?? 的赋值运算符简写。在此之前,这仅允许用于数学运算,例如 +*(参见规则 operator-assignment)。如果赋值目标和逻辑表达式的左侧表达式相同,则可以使用简写。例如,a = a || b 可以缩写为 a ||= b

规则详情

此规则要求或禁止逻辑赋值运算符简写。

选项

此规则有一个字符串选项和一个对象选项。字符串选项

  • "always" (默认)
  • "never"

对象选项(仅当字符串选项设置为 "always" 时可用)

  • "enforceForIfStatements": false (默认) 检查等效的 if 语句
  • "enforceForIfStatements": true 检查等效的 if 语句

always

此选项检查可以使用逻辑赋值运算符缩短的表达式。例如,a = a || b 可以缩短为 a ||= b。具有结合性的表达式,例如 a = a || b || c,会被报告为可以缩短为 a ||= b || c,除非使用括号显式定义了求值顺序,例如 a = (a || b) || c

对于使用默认 "always" 选项的此规则的错误代码示例

在 Playground 中打开
/*eslint logical-assignment-operators: ["error", "always"]*/

a = a || b
a = a && b
a = a ?? b
a || (a = b)
a && (a = b)
a ?? (a = b)
a = a || b || c
a = a && b && c
a = a ?? b ?? c

对于使用默认 "always" 选项的此规则的正确代码示例

在 Playground 中打开
/*eslint logical-assignment-operators: ["error", "always"]*/

a = b
a += b
a ||= b
a = b || c
a || (b = c)

if (a) a = b

a = (a || b) || c

never

对于使用 "never" 选项的此规则的错误代码示例

在 Playground 中打开
/*eslint logical-assignment-operators: ["error", "never"]*/

a ||= b
a &&= b
a ??= b

对于使用 "never" 选项的此规则的正确代码示例

在 Playground 中打开
/*eslint logical-assignment-operators: ["error", "never"]*/

a = a || b
a = a && b
a = a ?? b

enforceForIfStatements

此选项检查使用 if 语句的附加模式,这些模式可以使用逻辑赋值运算符来表达。

对于使用 ["always", { enforceForIfStatements: true }] 选项的此规则的错误代码示例

在 Playground 中打开
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/

if (a) a = b // <=> a &&= b
if (!a) a = b // <=> a ||= b

if (a == null) a = b // <=> a ??= b
if (a === null || a === undefined) a = b // <=> a ??= b

对于使用 ["always", { enforceForIfStatements: true }] 选项的此规则的正确代码示例

在 Playground 中打开
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/

if (a) b = c
if (a === 0) a = b

何时不使用

使用逻辑运算符赋值简写是一种风格选择。禁用此规则将允许开发人员根据具体情况选择哪种风格更具可读性。

版本

此规则在 ESLint v8.24.0 中引入。

资源

更改语言