no-sequences
禁止使用逗号运算符
逗号运算符包含多个表达式,而预期只有一个。它从左到右计算每个操作数,并返回最后一个操作数的值。但是,这经常掩盖副作用,并且它的使用通常是意外的。以下是一些序列示例
var a = (3, 5); // a = 5
a = b += 5, a + b;
while (a = next(), a && a.length);
(0, eval)("doSomething();");
规则详情
此规则禁止使用逗号运算符,但以下情况除外:
- 在
for
语句的初始化或更新部分。 - 默认情况下,如果表达式序列显式地用括号括起来。此异常可以使用
allowInParentheses
选项删除。
此规则的错误代码示例
在游乐场中打开
/*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)) {}
关于箭头函数体的说明
如果箭头函数体是语句而不是块,并且该语句包含一个序列,则需要在语句周围使用双括号来指示该序列是故意的。
箭头函数的错误代码示例
在游乐场中打开
/*eslint no-sequences: "error"*/
const foo = (val) => (console.log('bar') val);
const baz = () => ((bar = 123) 10);
const qux = () => { return (bar = 123) 10 }
箭头函数的正确代码示例
在游乐场中打开
/*eslint no-sequences: "error"*/
const foo = (val) => ((console.log('bar'), val));
const baz = () => (((bar = 123), 10));
const qux = () => { return ((bar = 123), 10) }
选项
此规则接受一个选项,一个对象,具有以下属性:
"allowInParentheses"
:如果设置为true
(默认值),则此规则允许显式用括号括起来的表达式序列。
allowInParentheses
使用 { "allowInParentheses": false }
选项时,此规则的错误代码示例
在游乐场中打开
/*eslint no-sequences: ["error", { "allowInParentheses": false }]*/
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)) {}
const foo = (val) => ((console.log('bar') val));
使用 { "allowInParentheses": false }
选项时,此规则的正确代码示例
在游乐场中打开
/*eslint no-sequences: ["error", { "allowInParentheses": false }]*/
for (i = 0, j = 10; i < j; i++, j--);
何时不使用它
如果使用逗号运算符的序列表达式是可以接受的,则禁用此规则。另一种情况是您可能希望报告逗号运算符的所有用法,即使在 for 循环中也是如此。您可以使用规则 no-restricted-syntax
来实现此目的。
{
"rules": {
"no-restricted-syntax": ["error", "SequenceExpression"]
}
}
版本
此规则是在 ESLint v0.5.1 中引入的。