未加星标

写javascript时要不要省略分号?

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

在打算写这篇文章之前,我是一个分号党,在写这篇文章之后,转为了无分号党。之前是写分号是编辑器语法较检所养成的强迫症,现在观念的转变,是因为看了不少大神的讨论后,觉得javascript语句后写分号除了增大工作量外,意义不大。

javascript自动填补分号的规则

在说要不要写分号之前,先了解一下javascript自动填补分号的规则。

在《javascript权威指南》中有一段话“如果一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一起解释。”,写javascript的时候,如果每条语句都独自写成一行,是不需要写分号的,但是下一行如果遇到上面提到的符号,javascript可能会与下一行合并解释。其中以“/”、“+”和“-”开头的语句在实现项目中比较少见,以“(”和“[”开头的则非常常见。下面各找了一个例子来说明。 以“(”开头的情况: a = b (function() { })()

javascript会解释成:

a = b(function() { })(); 以“[”开头的情况 a = function() { } [1,2,3].forEach(function(item) { });

javascript会解释成:

a = function() { }[1,2,3].forEach(function(item) { }); 以“/”开头的情况 a = 'abc' /[a-z]/.test(a)

期望的结果为true,但是javascript会解释成,接着就报错了:

a = ‘abc’/[a-z]/.test(a); 以“+”开头的情况 a = b +c

javascript会解释成

a = b + c; 以“-”开头的情况 a = b -c

javascript会解释成

a = b - c;

如果在return、break、continue、throw等关键字后面换行,javascript会在换行处填补分号。如:

return { a: 1 }

会解释成:

return; { a: 1 }

如果“++”或“--”运算符作为表达式的后缀时,表达式应该写在同一行,否则也会解释有误

例如:

x ++ y

会解释成:

x; ++y;

而不是

x++; y; 要不要写分号

对于究竟要不要写分号这个问题,我之前也没有细想,看到编辑器有提示就写了,也没有想过写与不写有什么区别,甚至在写这篇文章时,思路还是要将写分号当作团队代码的规范。后来看到知乎上vuejs的作者尤雨溪和前端大神贺师俊的回答后,我对写分号的想法完全颠覆了。

对于总是写分号的缺陷,贺思俊的 总结 很到位,他总结的3点缺陷如下:

人总是有可能忘记写分号。ASI(分号自动插入机制)导致无法区分是无意中忘记还是有意不写(代码折行)。 “总是写分号”并不能完全解决ASI缺陷(如return后换行会自动插入分号)。 “}”后是否要加分号需要回溯到对应“{”之前进行语义判断(是否是函数表达式),成本远高于前置分号判断(只要对行首字符进行token判断:是否是 [ ( + - / 五个符号之一)。

而对于上面提到的五种符号需要加分号的情况,完成可以用工具来帮我们自动完成,现在看来写分号除了满足强迫症外,好像真的没有什么必要了

参考资料 《javascript权威指南》 第30-31页 尤雨溪对于javascript语句后要不要写分号的回答 贺思俊对于javascript语句后要不要写分号的回答 Hacking Semicolons JavaScript 中的“自动分号插入”机制(ASI)

近期在看《javascript权威指南》,边看边总结,都会同步发送到微信公众号上,欢迎关注,欢迎提意见:


写javascript时要不要省略分号?

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: JavaScriptJava微信成本
分页:12
转载请注明
本文标题:写javascript时要不要省略分号?
本站链接:http://www.codesec.net/view/483687.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(26)