no-sequences
禁止使用逗号运算符(无序)
逗号运算符包含多个表达式,其中只有一个是预期的。它从左到右评估每个操作数并返回最后一个操作数的值。但是,这经常会掩盖副作用,其使用往往是一种意外。以下是一些序列的例子:
var a = (3, 5 // a = 5
a = b += 5, a + b;
while (a = next(), a && a.length
(0, eval)("doSomething("
规则细节
此规则禁止使用逗号运算符,但以下情况除外:
- 在
for
语句的初始化或更新部分。
- 如果表达式序列显式包含在圆括号中。
此规则的错误
代码示例:
/*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) {}
此规则的正确
代码示例:
/*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)) {}
何时不使用它
如果使用逗号运算符的序列表达式是可接受的,则禁用此规则。另一种情况是您可能想要报告逗号运算符的所有用法,即使它们包含在括号中或for循环中。你可以实现这个使用规则no-restricted-syntax
:
{
"rules": {
"no-restricted-syntax": ["error", "SequenceExpression"]
}
}
版本
该规则在 ESLint 0.5.1 中引入。