重学前端
程劭非(winter)
前手机淘宝前端负责人
105348 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
开篇词+学习路线+架构图 (3讲)
重学前端
15
15
1.0x
00:00/00:00
登录|注册

JavaScript语法(预备篇):到底要不要写分号呢?

以Template开头的语句
以正则表达式开头的语句
以数组开头的语句
以括号开头的语句
yield语句
箭头函数的箭头前
async关键字
throw语句
自增、自减运算符
return语句
带标签的break语句
带标签的continue语句
源代码结束处,不能形成完整的脚本或者模块结构,尝试插入分号
有换行符,且语法中规定此处不能有换行符,尝试插入分号
要有换行符,且下一个符号是不符合语法的,尝试插入分号
不写分号需要注意的情况
no LineTerminator here规则
自动插入分号规则
JavaScript语法:到底要不要写分号呢?

该思维导图由 AI 生成,仅供参考

你好,我是 winter。
在我们介绍 JavaScript 语法的全局结构之前,我们先要探讨一个语言风格问题:究竟要不要写分号。
这是一个非常经典的口水问题,“加分号”党和“不写分号”党之间的战争,可谓是经久不息。
实际上,行尾使用分号的风格来自于 Java,也来自于 C 语言和 C++,这一设计最初是为了降低编译器的工作负担。
但是,从今天的角度来看,行尾使用分号其实是一种语法噪音,恰好 JavaScript 语言又提供了相对可用的分号自动补全规则,所以,很多 JavaScript 的程序员都是倾向于不写分号。
这里要特意说一点,在今天的文章中,我并不希望去售卖自己的观点(其实我是属于“加分号”党),而是希望比较中立地给你讲清楚相关的知识,让你具备足够的判断力。
我们首先来了解一下自动插入分号的规则。

自动插入分号规则

自动插入分号规则其实独立于所有的语法产生式定义,它的规则说起来非常简单,只有三条。
要有换行符,且下一个符号是不符合语法的,那么就尝试插入分号。
有换行符,且语法中规定此处不能有换行符,那么就自动插入分号。
源代码结束处,不能形成完整的脚本或者模块结构,那么就自动插入分号。
这样描述是比较难以理解的,我们一起看一些实际的例子进行分析:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JavaScript语法中是否要写分号一直是一个争论的话题。本文讨论了自动插入分号的规则,以及JavaScript语法中的no LineTerminator here规则。文章还提到了一些不写分号可能导致错误的情况,如以括号、数组、正则表达式、模板开头的语句。读者可以通过本文了解到JavaScript中分号的使用规则,以及不写分号可能带来的潜在问题。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《重学前端》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(50)

  • 最新
  • 精选
  • 本末倒置っ
    几年前,各种各样的书大致上都推荐你加分号。 几年前,曾经由于构建工具有一些问题,导致不加分号可能会出问题。 jquery依然留着分号,vue源码不用分号。 尤雨溪曾经在知乎说:真正会导致上下行解析出问题的 token 有 5 个:括号,方括号,正则开头的斜杠,加号,减号。我还从没见过实际代码中用正则、加号、减号作为行首的情况,所以总结下来就是一句话:一行开头是括号或者方括号的时候加上分号就可以了,其他时候全部不需要。 哦当然再加个反引号。 可是写分号已经习惯了,又何必花力气改习惯去掉它。不加只要不写出bug,也很好。 反正分号有和没有,对eslint fix来说,只是瞬间的事。。。
    2019-03-27
    6
    104
  • jacklovepdf
    总结一下,不加分号可能会有问题,加分号一定不会有问题。那为什么不加?
    2019-06-24
    5
    20
  • Scorpio
    写了几年一直不写分号。。。等出了问题再说吧。。。我懒。。
    2019-03-25
    1
    13
  • Rock
    一直有加分号的习惯,一是不写分号我有强迫症,二是不写分号webstorm会提示
    2019-04-19
    2
    12
  • 彧豪
    另外我个人也是不写分号,然后使用的是双引号,诸位不写分号党,如果想要写上分号,用的eslint和vs code那么可以这么搞: 1. eslintrc中加入这条规则:"semi": ["error", "always"] 2. vsc中设置一下:"eslint.autoFixOnSave": true 此时,你保存的时候,vsc会自动帮你在需要加分号的地方加上分号
    2019-03-26
    3
    7
  • 醉月
    用了cli写vue以后就很少用分号了 以前学js写原生的时候强迫症一样写分号 这东西就是见仁见智 前端真的是娱乐圈,, 为个分号还能争起来。
    2019-03-25
    7
  • Dylan-Tseng
    个人觉得还是加分号比较好,至少能保证加上去之后今天老师说的问题都能够得到我们想要的答案。
    2019-03-25
    6
  • 梦星魂
    加封号更好看一点,更有终止感。而且能明显和if else 这样的语句区分开来。
    2020-07-02
    5
  • Geek_0bb537
    自动补齐和自动驾驶一样 不特么靠谱!稳妥点 养成写分号的习惯!
    2019-04-15
    5
  • 行则将至
    采用eslint是不会写的,不采用会写上
    2019-03-25
    4
收起评论
显示
设置
留言
50
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部