# logical-assignment-operators
要求或禁止逻辑赋值逻辑运算符简写
一些该规则报告的问题可以通过 --fix 命令行选项 自动修复
ES2021 引入了逻辑运算符 ||
、&&
和 ??
的赋值运算符简写。以前,这仅允许用于数学运算,例如 +
或 *
(参见规则 operator-assignment
)。如果赋值目标和逻辑表达式的左表达式相同,则可以使用简写。例如 a = a || b
可以缩短为 a ||= b
。
# 规则详情
此规则要求或禁止逻辑赋值运算符简写。
# 选项
该规则有一个字符串和一个对象选项。字符串选项:
"always"
(默认)"never"
对象选项(仅当字符串选项设置为 "always"
时可用):
"enforceForIfStatements": false
(默认)不检查等效的if
语句"enforceForIfStatements": true
检查等效的if
语句
# always
此规则使用默认 "always"
选项的错误代码示例:
/*eslint logical-assignment-operators: ["error", "always"]*/
a = a || b
a = a && b
a = a ?? b
a || (a = b)
a && (a = b)
a ?? (a = b)
此规则使用默认 "always"
选项的正确代码示例:
/*eslint logical-assignment-operators: ["error", "always"]*/
a = b
a += b
a ||= b
a = b || c
a || (b = c)
if (a) a = b
# never
此规则使用 "never"
选项的错误代码示例:
/*eslint logical-assignment-operators: ["error", "never"]*/
a ||= b
a &&= b
a ??= b
此规则使用 "never"
选项的正确代码示例:
/*eslint logical-assignment-operators: ["error", "never"]*/
a = a || b
a = a && b
a = a ?? b
# enforceForIfStatements
此选项使用可以用逻辑赋值运算符表示的 if 语句检查其他模式。
此规则使用 ["always", { enforceForIfStatements: true }]
选项的错误代码示例:
/*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 }]
选项的正确代码示例:
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/
if (a) b = c
if (a === 0) a = b
# 何时不使用
使用逻辑运算符赋值速记是一种风格选择。关闭此规则将允许开发人员根据具体情况选择哪种样式更具可读性。