logical-assignment-operators
要求或禁止逻辑赋值运算符简写
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"]*/
对于使用默认 "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"]*/
对于使用 "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 }]*/
// <=> a &&= b
// <=> a ||= b
// <=> 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 中引入。