no-sequences
禁用逗號運算符
逗號運算符包含多個表達式,但只期望一個。它從左到右評估每個運算元,並返回最後一個運算元的值。然而,這經常模糊了副作用,並且其使用通常是意外。以下是一些序列的範例
let a = (3, 5); // a = 5
a = b += 5, a + b;
while (a = next(), a && a.length);
(0, eval)("doSomething();");
規則詳情
此規則禁止使用逗號運算符,但以下情況除外
- 在
for
語句的初始化或更新部分。 - 預設情況下,如果表達式序列被顯式地包裝在括號中。可以使用
allowInParentheses
選項移除此例外。
此規則的錯誤程式碼範例
在 Playground 中開啟
/*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) {}
此規則的正確程式碼範例
在 Playground 中開啟
/*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)) {}
關於箭頭函數主體的注意事項
如果箭頭函數主體是語句而不是區塊,並且該語句包含序列,則需要在語句周圍使用雙括號,以指示該序列是有意的。
箭頭函數的錯誤程式碼範例
在 Playground 中開啟
/*eslint no-sequences: "error"*/
const foo = (val) => (console.log('bar') val);
const baz = () => ((bar = 123) 10);
const qux = () => { return (bar = 123) 10 }
箭頭函數的正確程式碼範例
在 Playground 中開啟
/*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 }
選項時,此規則的錯誤程式碼範例
在 Playground 中開啟
/*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 }
選項時,此規則的正確程式碼範例
在 Playground 中開啟
/*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 中引入。