adr*_*anp 6 javascript lint ecmascript-6 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)
Run Code Online (Sandbox Code Playgroud)
有人可以解释自动分号插入如何在 ES6 中与类有关以及为什么 ESLint 有这种行为吗?
小智 4
根据ECMAScript 2015class规范,分号是有效的ClassElement,因此它可以存在于ClassBody.
然而,它的语义将其视为没有任何行为(例如,请参阅 参考资料NonConstructorMethodDefinitions)。实际上,您可以在 a 中使用任意数量的分号ClassBody,并且不会改变任何事情。
自动分号插入实际上在这里并没有发挥作用,也没有像人们通常认为的那样频繁。粗略地说,只有当解析器发现不允许成为前一个块或行的一部分时,才会发生 ASI。(如果您感兴趣的话,ASI 的实际规则并不是很长;向下滚动查看示例和实用建议。)但是在这种情况下,您可以按顺序将一堆类方法定义放在一起。因此,列表中的下一个方法没有任何“意外”,因此它们之间不会插入分号。
我不知道该决定的历史,但我认为分号是有效的,因为它们作为空语句已经有效,并且如果您不能将分号放在类主体中,ClassElement可能会让人们感到困惑。
| 归档时间: |
|
| 查看次数: |
2546 次 |
| 最近记录: |