noAssignInExpressions (since v12.0.0)
Disallow assignments in expressions.
In expressions, it is common to mistype a comparison operator (such as ==
) as an assignment operator (such as =
). Moreover, the use of assignments in expressions is confusing. Indeed, expressions are often considered as side-effect free.
Examples
Invalid
let a, b;
a = (b = 1) + 1;
nursery/noAssignInExpressions.js:2:6 lint/nursery/noAssignInExpressions FIXABLE ━━━━━━━━━━━━━━━━━━
✖ The assignment should not be in an expression.
1 │ let a, b;
> 2 │ a = (b = 1) + 1;
│ ^^^^^
3 │
ℹ The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
ℹ Suggested fix: Did you mean '==='?
2 │ a·=·(b·===·1)·+·1;
│ ++
let a;
if (a = 1) {
}
nursery/noAssignInExpressions.js:2:5 lint/nursery/noAssignInExpressions FIXABLE ━━━━━━━━━━━━━━━━━━
✖ The assignment should not be in an expression.
1 │ let a;
> 2 │ if (a = 1) {
│ ^^^^^
3 │ }
4 │
ℹ The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
ℹ Suggested fix: Did you mean '==='?
2 │ if·(a·===·1)·{
│ ++
function f(a) {
return a = 1;
}
nursery/noAssignInExpressions.js:2:12 lint/nursery/noAssignInExpressions FIXABLE ━━━━━━━━━━━━━━━━━
✖ The assignment should not be in an expression.
1 │ function f(a) {
> 2 │ return a = 1;
│ ^^^^^
3 │ }
4 │
ℹ The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
ℹ Suggested fix: Did you mean '==='?
2 │ ····return·a·===·1;
│ ++
Valid
let a;
a = 1;