JS自动插入分号机制ASI

个人博客文章同步地址

问题背景

  敲代码的时候写了一条判断语句,大致作用是判断两个长方体是否贴合,因此需要对三个维度分别进行判断:

return check(b1.min.x, b2.min.x) && check(b1.max.x, b2.max.x)
    && check(b1.min.y, b2.min.y) && check(b1.max.y, b2.max.y)
    && check(b1.min.z, b2.min.z) && check(b1.max.z, b2.max.z);

  因为语句比较长,因此就将其分行,按照编码经验来说,这种分行的写法肯定是没错的,不过又想起了之前在学习 JS 的时候有看过这么一个概念:**JS 会在行末自动加上分号,因此 JS 代码中的分号可以省略。**不过如果真是这样的话上面的代码岂不是会在第一行末就加上分号吗?

  出现了矛盾,既然上面的代码不会出错,那就是之前学习的知识内容出现了偏差,因此借这个机会整理了一下 ASI(Automatic Semicolon Insertion ,自动插入分号机制) 的知识。

  学习之时,看了一些关于 JS 语句后是否应该加分号的回答,才发现这个问题很早之前就被诸多大神们热烈讨论过了,已沦为加分号党和不加分号党之间旷日持久的口水战。虽然看了一圈下来,多数写回答的大佬都会更偏向于不加分号的形式,不加分号的观点主要还是:

  1. 程序员总有犯迷糊忘了加分号的时候,这样 ASI 就无法区分是有意不写还是无意中忘了写
  2. 即使全都加上分号,也不能解决 ASI 的一些缺陷(return 换行后会自动插入分号)
  3. 对全加分号后语义表达判断的成本问题(如函数表达式的 } 后是否都需要加上分号)
  4. 不加分号的话除了几种特殊情况(下文有),其余情况并不会影响到程序的正常运行,且特殊情况的出现概率还很小

  对我个人来说,我是习惯在语句后加上分号的,不加分号就会有点不舒服(编码强迫症患者),不过我对这个问题还是保持中立的,加分号和不加分号说到底也就是编码风格问题,真要说其实两者都有犯错的可能,按照自己编码习惯来,舒舒服服的最好。而实际在团队合作时,不管你个人编程习惯如何,只要配置了符合团队编码风格的格式化代码配置,我觉得就是没问题的。

ASI 插入分号的时机

1. JS 中一些语法后加上换行符后会自动加上分号

  • 后置运算符(++--
  • con
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值