The "extends": "eslint:recommended"
property in a configuration file enables this rule.
In conditional statements, it is very easy to mistype a comparison operator (such as ==
) as an assignment operator (such as =
). For example:
// Check the user's job title if (user.jobTitle = "manager") { // user.jobTitle is now incorrect }
There are valid reasons to use assignment operators in conditional statements. However, it can be difficult to tell whether a specific assignment was intentional.
This rule disallows ambiguous assignment operators in test conditions of if
, for
, while
, and do...while
statements.
This rule has a string option:
"except-parens"
(default) allows assignments in test conditions only if they are enclosed in parentheses (for example, to allow reassigning a variable in the test of a while
or do...while
loop)"always"
disallows all assignments in test conditionsExamples of incorrect code for this rule with the default "except-parens"
option:
/*eslint no-cond-assign: "error"*/ // Unintentional assignment var x; if (x = 0) { var b = 1; } // Practical example that is similar to an error function setHeight(someNode) { "use strict"; do { someNode.height = "100px"; } while (someNode = someNode.parentNode); }
Examples of correct code for this rule with the default "except-parens"
option:
/*eslint no-cond-assign: "error"*/ // Assignment replaced by comparison var x; if (x === 0) { var b = 1; } // Practical example that wraps the assignment in parentheses function setHeight(someNode) { "use strict"; do { someNode.height = "100px"; } while ((someNode = someNode.parentNode)); } // Practical example that wraps the assignment and tests for 'null' function setHeight(someNode) { "use strict"; do { someNode.height = "100px"; } while ((someNode = someNode.parentNode) !== null); }
Examples of incorrect code for this rule with the "always"
option:
/*eslint no-cond-assign: ["error", "always"]*/ // Unintentional assignment var x; if (x = 0) { var b = 1; } // Practical example that is similar to an error function setHeight(someNode) { "use strict"; do { someNode.height = "100px"; } while (someNode = someNode.parentNode); } // Practical example that wraps the assignment in parentheses function setHeight(someNode) { "use strict"; do { someNode.height = "100px"; } while ((someNode = someNode.parentNode)); } // Practical example that wraps the assignment and tests for 'null' function setHeight(someNode) { "use strict"; do { someNode.height = "100px"; } while ((someNode = someNode.parentNode) !== null); }
Examples of correct code for this rule with the "always"
option:
/*eslint no-cond-assign: ["error", "always"]*/ // Assignment replaced by comparison var x; if (x === 0) { var b = 1; }
This rule was introduced in ESLint 0.0.9.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/no-cond-assign