JavaScript 中的分号:使用还是不使用?
自动分号插入(ASI)
3 自动分号插入规则:
什么时候不应该使用分号?
最后的想法
在 Flatiron School 的第一次 JavaScript 讲座中,讲师提到分号在 JavaScript 中是可选的……除非它们不是 🤔
我决定进一步研究 JavaScript 中的分号用法,以真正理解我们为什么想要或不想使用它们,并利用这些知识避免早期养成任何坏习惯。

自动分号插入(ASI)
在 JavaScript 中,分号有时是可选的,这是由于自动分号插入(ASI)机制。ASI 并不意味着分号会被插入到代码中,它更像是 JavaScript 使用的一套规则,用于决定分号在某些位置是否被解释。我在 Fullstack Academy 上找到了一个关于这个主题的有用讲座,你可以在这里查看。我还找到了 Bradley Braithwaite 的一篇博客文章。下面我将重点介绍这些资源的主要内容。
3 自动分号插入规则:
以下是关于 ASI 需要注意的 3 个要点。
1- 当遇到语法不正确的行终止符或“}”时,会插入分号。因此,如果在上一行代码之后立即解析新行代码仍然生成有效的 JavaScript,则不会触发 ASI。
例 1:
var beef
var cheese
将会变成:
var beef;
var cheese;
示例 2:
var a
b=
3;
这里,语法并不期望在 a 之后看到 b,因此触发了 ASI
var a;
b = 3;
示例 3:
a = b + c
(d + e).print()
等于:
a = b + c(d + e).print();
2- 如果程序运行到输入末尾且没有错误,但它不是一个完整的程序,则会在末尾添加一个分号。这基本上意味着,如果文件末尾缺少分号,则会在文件末尾添加一个分号。
3- 语法中某些地方,如果出现换行符,则会无条件终止语句并添加分号。例如,return 语句。
function getCheese() {
return
{
cheeseType: "Gouda"
}
}
这将触发 ASI 并导致:
function getCheese() {
return;
{
cheeseType: "Gouda"
}
}
返回语句中的表达式应该在同一行开始,如下所示:
function getCheese() {
return {
cheeseType: "Gouda"
}
}
什么时候不应该使用分号?
以下是一些不需要分号的情况:
如果(...){...}否则{...}
对于(...){...}
当(...){...}
注意:您确实需要一个 after:do{...} while (...);
最后的想法
如果你打算在 JavaScript 中不使用可选的分号,那么至少了解一下 ASI 的作用。例如,压缩或最小化可能会导致你的有效代码抛出错误,因为这些程序可能依赖于分号。
此外,没有分号会更难调试,因为你的代码可能会在你不知情的情况下被连接在一起。如果你在不该换行的地方加了换行符,ASI 可能会介入并假设是分号,即使那里不应该有分号。

公司和开源项目可能会有这样或那样的偏好,所以一定要注意它是什么。
最后,如果您认为您可能由于 ASI 而遇到错误,请查看 Babeljs.io 进行调试 - 它允许您输入代码并向您显示 ASI 分号的插入位置。
当谈到 JavaScript 中的分号时,您发现什么是正确的?
鏂囩珷鏉ユ簮锛�https://dev.to/adriennemiller/semicolons-in-javascript-to-use-or-not-to-use-2nli