Javascript 类声明ECMAScript 6后分号上的ESLint错误
我有以下代码:Javascript 类声明ECMAScript 6后分号上的ESLint错误,javascript,ecmascript-6,lint,babeljs,Javascript,Ecmascript 6,Lint,Babeljs,我有以下代码: class Car() { constructor() { // ... } withSemi() { // ... }; // ESLint does not complain here withoutSemi() { // ... } // ESLint does not complain here }; // ESLint will complain about th
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会有这种行为吗?根据,分号是有效的类元素
,因此它可以存在于类主体
中
但是,其语义将其视为没有任何行为(例如,请参见)实际上,您可以在类主体中使用任意多或任意少的分号,而且它不会改变任何事情。
自动分号插入实际上并没有在这里起作用,或者像人们一般认为的那样频繁。粗略地说,ASI仅在解析器看到不允许作为前一个块或行的一部分的内容时发生。(如果您感兴趣,ASI的示例并不太长;向下滚动以获取示例和实用建议。)但是在本文中,您可以按顺序将一组类方法定义放在一起。因此,列表中的下一个方法没有什么“意外”,因此不会在它们之间插入分号
我不知道这个决定的历史,但我假设分号是有效的
ClassElement
s,因为它们已经作为空语句有效了,如果不能在类主体中放分号,人们可能会感到困惑。据我所知,类
的语义类似于函数
没有分号,即类名{}
和函数名(){}
,因此ESLint的警告是正确的。那么如何解释方法后的分号呢?(ESLint不在乎我是否添加它们)。从我所看到的方法
没有定义关键字函数
,类似函数
不应该结束代码>。但是像public numAttacks=0这样的表达式代码>应以结尾代码>非常类似于您期望javascript在ES6之前编写的方式,您的答案是有道理的,但是通过查看ESLint,我希望它会抱怨类主体中额外的半部分。实际上,查看,它肯定应该捕获类主体中的半部分。您是否在配置中将ecmaVersion
设置为6或更高?否则ESLint将不会使用类规则。。。