类声明ECMAScript 6后分号的ESLint错误

时间:2015-06-15 07:35:31

标签: javascript ecmascript-6 lint babeljs

我有以下代码:

class Car() {

    constructor() {
        // ...
    }

    withSemi() {
        // ...
    };  // ESLint does not complain here

    withoutSemi() {
       // ...
    }  // ESLint does not complain here

};  // ESLint will complain about this semicolon (no-extra-semi)

有人可以解释自动分号插入在ES6中如何处理类以及ESLint为什么会出现这种行为?

1 个答案:

答案 0 :(得分:2)

根据ECMAScript 2015 class specification,分号是有效的ClassElement,因此它可以存在于ClassBody内。

但是,它的语义将其视为没有任何行为(例如,请参阅NonConstructorMethodDefinitions)。 实际上,您可以在ClassBody中添加所需数量的分号,但它不会改变任何内容。

自动分号插入实际上并没有在这里发挥作用,或者像人们通常认为的那样频繁。粗略地说,只有当解析器看到不允许成为前一个块或行的一部分时才会发生ASI。 (如果您感兴趣,ASI的actual rules并不长;向下滚动以获取示例和实用建议。)但是在这种情况下,您可以放一堆课程方法定义顺序一起。因此没有什么"意想不到的"关于列表中的下一个方法,因此不会在它们之间插入分号。

我不知道决定的历史,但我认为分号是有效的ClassElement,因为它们已经作为空语句有效,如果你它可能会让人感到困惑不能将分号放在一个类体中。