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)

相关推荐

  • 80创业,80年代后应该如何创业

    技术80创业,80年代后应该如何创业如今的80后有着自己独特的创业方式80创业,但无论何种方式都不能脱离脚踏实地。创业对于80后来说是一次人生的转折,是一次新的选择,所以要谨慎,更要去坚持。
    第一条,确定方向
    方向不是目

    生活 2021年10月27日
  • golang 占位符%d %t %v

    技术golang 占位符%d %t %v golang 占位符%d %t %v1、首先需要了解哪些占位符分别代表什么
    这些是死知识,把常用的记住,不常用的直接查表就行了
    golang 的fmt 包实现了

    礼包 2021年11月30日
  • spark提交作业参数(spark提交作业的流程)

    技术Spark提交作业的示例分析今天就跟大家聊聊有关Spark提交作业的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。初尝试cd software/spa

    攻略 2021年12月16日
  • 用python做未来的预测(数据预测怎么用python做)

    技术如何在R中使用开源大规模预测工具Prophet这期内容当中小编将会给大家带来有关如何在R中使用开源大规模预测工具Prophet,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Prop

    攻略 2021年12月20日
  • 如何利用Springboot+Dubbo构建分布式微服务

    技术如何利用Springboot+Dubbo构建分布式微服务本篇内容主要讲解“如何利用Springboot+Dubbo构建分布式微服务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家

    攻略 2021年11月12日
  • 如何分析可添加快捷键组合的JavaScript类库keyboard.js

    技术如何分析可添加快捷键组合的JavaScript类库keyboard.js这篇文章给大家介绍如何理解可添加快捷键组合的JavaScript类库keyboard.js,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大

    攻略 2021年11月17日