JavaScript 中的分号:该用还是不该用?自动分号插入 (ASI) 3 条自动分号插入规则:什么时候不应该使用分号?结语

2025-06-08

JavaScript 中的分号:使用还是不使用?

自动分号插入(ASI)

3 自动分号插入规则:




什么时候不应该使用分号?

最后的想法

在 Flatiron School 的第一次 JavaScript 讲座中,讲师提到分号在 JavaScript 中是可选的……除非它们不是 🤔

我决定进一步研究 JavaScript 中的分号用法,以真正理解我们为什么想要或不想使用它们,并利用这些知识避免早期养成任何坏习惯。

Peter Arkle 分号绘画
彼得·阿克尔,https://opinionator.blogs.nytimes.com/2012/07/02/semicolons-a-love-story/

自动分号插入(ASI)

在 JavaScript 中,分号有时是可选的,这是由于自动分号插入(ASI)机制。ASI 并不意味着分号会被插入到代码中,它更像是 JavaScript 使用的一套规则,用于决定分号在某些位置是否被解释。我在 Fullstack Academy 上找到了一个关于这个主题的有用讲座,你可以在这里查看。我还找到了 Bradley Braithwaite 的一篇博客文章。下面我将重点介绍这些资源的主要内容。

3 自动分号插入规则:

以下是关于 ASI 需要注意的 3 个要点。

1- 当遇到语法不正确的行终止符或“}”时,会插入分号。因此,如果在上一行代码之后立即解析新行代码仍然生成有效的 JavaScript,则不会触发 ASI。

例 1:



var beef 
var cheese 


Enter fullscreen mode Exit fullscreen mode

将会变成:



var beef; 
var cheese; 



Enter fullscreen mode Exit fullscreen mode

示例 2:



var a 
    b= 
    3;


Enter fullscreen mode Exit fullscreen mode

这里,语法并不期望在 a 之后看到 b,因此触发了 ASI



var a; 
b = 3;


Enter fullscreen mode Exit fullscreen mode

示例 3:



a = b + c 
(d + e).print() 



Enter fullscreen mode Exit fullscreen mode

等于:



a = b + c(d + e).print();



Enter fullscreen mode Exit fullscreen mode

2- 如果程序运行到输入末尾且没有错误,但它不是一个完整的程序,则会在末尾添加一个分号。这基本上意味着,如果文件末尾缺少分号,则会在文件末尾添加一个分号。

3- 语法中某些地方,如果出现换行符,则会无条件终止语句并添加分号。例如,return 语句。




function getCheese() {
    return 
    { 
       cheeseType: "Gouda"
    } 
}


Enter fullscreen mode Exit fullscreen mode

这将触发 ASI 并导致:




function getCheese() {
    return; 
    { 
       cheeseType: "Gouda"
    } 
  }


Enter fullscreen mode Exit fullscreen mode

返回语句中的表达式应该在同一行开始,如下所示:



function getCheese() {
return {
cheeseType: "Gouda"
}
}

Enter fullscreen mode Exit fullscreen mode




什么时候不应该使用分号?

以下是一些不需要分号的情况:

如果(...){...}否则{...}
对于(...){...}
当(...){...}

注意:您确实需要一个 after:do{...} while (...);

最后的想法

如果你打算在 JavaScript 中不使用可选的分号,那么至少了解一下 ASI 的作用。例如,压缩或最小化可能会导致你的有效代码抛出错误,因为这些程序可能依赖于分号。

此外,没有分号会更难调试,因为你的代码可能会在你不知情的情况下被连接在一起。如果你在不该换行的地方加了换行符,ASI 可能会介入并假设是分号,即使那里不应该有分号。

保持冷静,这只是一个分号
https://www.everywordcounts.co.uk/no-need-to-be-scared-of-semicolons/

公司和开源项目可能会有这样或那样的偏好,所以一定要注意它是什么。

最后,如果您认为您可能由于 ASI 而遇到错误,请查看 Babeljs.io 进行调试 - 它允许您输入代码并向您显示 ASI 分号的插入位置。

当谈到 JavaScript 中的分号时,您发现什么是正确的?

鏂囩珷鏉ユ簮锛�https://dev.to/adriennemiller/semicolons-in-javascript-to-use-or-not-to-use-2nli
PREV
通过 4 个步骤为 React/Redux 编写自己的 WebSocket 中间件
NEXT
WordPress主题开发教程