The comma operator includes multiple expressions where only one is expected. It evaluates each operand from left to right and returns the value of the last operand. However, this frequently obscures side effects, and its use is often an accident. Here are some examples of sequences:
var a = (3, 5); // a = 5 a = b += 5, a + b; while (a = next(), a && a.length); (0, eval)("doSomething();");
This rule forbids the use of the comma operator, with the following exceptions:
for
statement.Examples of incorrect code for this rule:
/*eslint no-sequences: "error"*/ foo = doSomething(), val; 0, eval("doSomething();"); do {} while (doSomething(), !!test); for (; doSomething(), !!test; ); if (doSomething(), !!test); switch (val = foo(), val) {} while (val = foo(), val < 42); with (doSomething(), val) {}
Examples of correct code for this rule:
/*eslint no-sequences: "error"*/ foo = (doSomething(), val); (0, eval)("doSomething();"); do {} while ((doSomething(), !!test)); for (i = 0, j = 10; i < j; i++, j--); if ((doSomething(), !!test)); switch ((val = foo(), val)) {} while ((val = foo(), val < 42)); // with ((doSomething(), val)) {}
Disable this rule if sequence expressions with the comma operator are acceptable. Another case is where you might want to report all usages of the comma operator, even if they are wrapped in parentheses or in a for loop. You can achieve this using rule no-restricted-syntax
:
{ "rules": { "no-restricted-syntax": ["error", "SequenceExpression"] } }
This rule was introduced in ESLint 0.5.1.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/no-sequences