logical-assignment-operators
Require or disallow logical assignment operator shorthand
Some problems reported by this rule are automatically fixable by the --fix
command line option
Some problems reported by this rule are manually fixable by editor suggestions
This rule is currently frozen and is not accepting changes.
ES2021 introduces the assignment operator shorthand for the logical operators ||
, &&
and ??
.
Before, this was only allowed for mathematical operations such as +
or *
(see the rule operator-assignment).
The shorthand can be used if the assignment target and the left expression of a logical expression are the same.
For example a = a || b
can be shortened to a ||= b
.
Rule Details
This rule requires or disallows logical assignment operator shorthand.
Options
This rule has a string and an object option. String option:
"always"
(default)"never"
Object option (only available if string option is set to "always"
):
"enforceForIfStatements": false
(default) Do not check for equivalentif
statements"enforceForIfStatements": true
Check for equivalentif
statements
always
This option checks for expressions that can be shortened using logical assignment operator. For example, a = a || b
can be shortened to a ||= b
.
Expressions with associativity such as a = a || b || c
are reported as being able to be shortened to a ||= b || c
unless the evaluation order is explicitly defined using parentheses, such as a = (a || b) || c
.
Examples of incorrect code for this rule with the default "always"
option:
/*eslint logical-assignment-operators: ["error", "always"]*/
Examples of correct code for this rule with the default "always"
option:
/*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
Examples of incorrect code for this rule with the "never"
option:
/*eslint logical-assignment-operators: ["error", "never"]*/
Examples of correct code for this rule with the "never"
option:
/*eslint logical-assignment-operators: ["error", "never"]*/
a = a || b
a = a && b
a = a ?? b
enforceForIfStatements
This option checks for additional patterns with if statements which could be expressed with the logical assignment operator.
Examples of incorrect code for this rule with the ["always", { enforceForIfStatements: true }]
option:
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/
// <=> a &&= b
// <=> a ||= b
// <=> a ??= b
// <=> a ??= b
Examples of correct code for this rule with the ["always", { enforceForIfStatements: true }]
option:
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/
if (a) b = c
if (a === 0) a = b
When Not To Use It
Use of logical operator assignment shorthand is a stylistic choice. Leaving this rule turned off would allow developers to choose which style is more readable on a case-by-case basis.
Version
This rule was introduced in ESLint v8.24.0.