JavaScript中分号的一些细节

技术JavaScript中分号的一些细节 JavaScript中分号的一些细节JavaScript 中的分号是可选的,加不加分号主要是个代码风格问题。一种风格是使用分号明确结束语句,即便这些分号不是必需

JavaScript中分号的一些细节。

JavaScript中的分号是可选的,是否增加额外的标记主要是代码风格的问题。一种风格是用分号显式结束语句,即使这些分号不是必需的;另一种风格是尽可能不添加额外的标记,只在必要时添加。个人不喜欢加分。当然,很多朋友喜欢加分。不管你喜欢哪种风格,你都需要知道一些关于JavaScript中分号的细节。

代码中分号的作用

分号的主要功能是将程序语句作为断言(EOS)结束,这样解析器就可以正确解析程序。在许多C-Style语言中,分号用于显式结束一行语句,主要是为了降低语言编译器的开发成本。但是现代编译器足够聪明,可以处理多行语句。很多语言不需要明确以分号结尾,比如Go、Scala、Ruby、Python、Swift、Groovy等等。

尽管JavaScript是一种类似C的语言,但它不同于C和Java。分号在JavaScript中也是可选的。它有一个自动分号插入机制,自动分号插入(ASI)。

JavaScript 自动分号插入机制

JavaScript有自动分号插入机制(简称ASI)。ECMA-262-自动半殖民地插入的明确描述:

从左到右,当解析器遇到不符合任何语法的标记(提供标记)时,只要满足以下条件之一,它就会自动在有问题的标记前面插入分号。

至少有一个行终止符将违规令牌与前一个令牌分开。

违规令牌为}。

从左到右解析程序,令牌输入流已经结束。当解析器无法将输入令牌流解析为一个完整的ECMAScript程序时,会在输入流的末尾自动插入一个分号。

从左到右,解析器遇到了一些语法表达式允许的标记,但它是受限产品。当至少有一个换行符将受限令牌与前一个令牌分开时,会在受限令牌前面自动插入一个分号。

但是,上面的规则有一个附加的优先级条件:如果在插入分号后解析结果是一个空语句,或者在插入分号后它变成for语句头的两个分号之一,则不会自动插入分号。

注:以上说明翻译比较别扭。可以多看几遍,也可以看英文原版ECMA-262-自动分号插入。

分号自动插入的情况

综上所述,使用自动分号插入来换取行为基础,解析器会尽力将新行合并到当前行中,新行只有满足ASI规则才会被视为独立语句。

主要有以下自动插入规则:

当一个新的行被合并到当前行中时,这构成了一个非法的语句,并且不能被正确解析,分号将被自动插入。

当一个新的行以{开始,这是代码块的结束位置,分号会自动插入。

当return语句结束时,会自动在行尾插入一个分号。

当break语句结束时,会自动在行尾插入一个分号。

当以throw语句结束时,分号会自动插入到行尾。

以continue语句结束时,在行尾自动插入分号。

以ES6的yield语句结尾时,在行尾自动插入分号。

-后缀表达式用作新行的开头,并且在该行的开头自动插入分号。

源代码文件末尾的自动插入号。

如上所示,如果没有额外的符号,该代码将在运行时报告错误。

不能省略分号的情况

通常,如果一条语句以(,[,/,-,`)开头,它可能被解释为前一条语句的一部分。实际上,很少有以/、-。但是,以(,[开头的语句非常常见。通常,我可以在行首防御性地添加一个分号。

之前,我们学习了分号的自动插入。现在我们来看一些例子。

让嘿='嘿'

['刘','刘星']。forEach(控制台. log)

想一想上面的结果是什么。运行此代码将引发。

未捕获类型错误:无法读取未定义的属性“forEach”

基于规则1,上面的代码将被解析为下面的代码。

让嘿='嘿'['刘','刘星']。forEach(控制台. log)

可以看出,以[开头的语句前面没有分号,这可能会导致错误。

让我们看看开头的语句的示例代码。

常量a=1

常数b=2

常数c=a b

(a)b。toString()

你以为上面代码的结果是“3”但实际上它会抛出一个错误b不是函数,因为根据ASI规则,它会被解析成下面的代码:

const a=1;const b=2;const c=a b(a b)。toString()

我们不介绍/,-作为句子的开头,这种情况比较少见,大家可以自己试试。请记住,当语句以(,[,/,-,`)开头时,语句前需要一个分号!

我们来看看return的用法。

(()={

返回

{

姓名: '刘星'

}

})()

您的预期值是否返回一个名为的对象,但它返回未定义。这是ASI自动添加分号返回。在这里,您必须正确包装行,以确保代码正确运行。我们可以看到,除了正确的分号之外,我们还需要正确合理地换行,以使代码结构更加清晰。

总结

我们知道JavaScript的自动分号插入机制,以及JavaScript什么时候会自动添加分号。我们需要在(,[,/,-,`)的开头准确地添加分号。自动分号插入机制为我们提供了两种选择。是否添加额外的分数完全取决于您或您的团队的偏好。现在我们也有了更漂亮的、Eslint等工具来自动统一风格。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/70031.html

(0)

相关推荐

  • PostgreSQL中函数AssignTransactionId的实现逻辑是什么

    技术PostgreSQL中函数AssignTransactionId的实现逻辑是什么本篇内容介绍了“PostgreSQL中函数AssignTransactionId的实现逻辑是什么”的有关知识,在实际案例的操作过程中,不

    攻略 2021年11月10日
  • Oracle中如何解决ORA-01555错误

    技术Oracle中如何解决ORA-01555错误这篇文章给大家分享的是有关Oracle中如何解决ORA-01555错误的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。11.6 ORA-01555

    攻略 2021年11月20日
  • 如何理解Go错误处理之用panic取代rr != nil的模式

    技术如何理解Go错误处理之用panic取代rr != nil的模式这篇文章主要介绍“如何理解Go错误处理之用panic取代rr != nil的模式”,在日常操作中,相信很多人在如何理解Go错误处理之用panic取代rr

    攻略 2021年10月21日
  • jquery如何控制a标签跳转

    技术jquery如何控制a标签跳转这篇文章主要介绍“jquery如何控制a标签跳转”,在日常操作中,相信很多人在jquery如何控制a标签跳转问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年11月15日
  • 美国独享服务器租用特点

    技术美国独享服务器租用特点与廉价的虚拟主机不同,美国独享服务器需要单个网站或网络所有者使用服务器资源。服务器资源(如硬件、软件和操作系统)受到用户的完全控制。此外,物理服务器通常安装在数据中心内。虽然很多用户为了节省成本

    礼包 2021年11月3日
  • XamarinAndroid组件中RecylerView适配器如何使用动画

    技术XamarinAndroid组件中RecylerView适配器如何使用动画这篇文章主要介绍XamarinAndroid组件中RecylerView适配器如何使用动画,文中介绍的非常详细,具有一定的参考价值,感兴趣的小

    攻略 2021年12月3日