最近在学习JS的时候遇到这么一个问题。由于我之前的学习中一直是写一句JS代码,加一个分号。但是最近我才发现原来JS代码是可以不添加分号的。如果可以不写分号的话会不会更省事呢?于是我在网上查了相关资料整理了以下内容。

  JavaScript自动加分号规则:

    1.当有换行符(包括含有换行符的多行注释),并且下一个token没法跟前面的语法匹配时,会自动补分号;

    2.当有 } 没有分号时,会补分号;

    3.当程序源代码结束时,如果缺少分号,会补分号;

    4.在return、break、continue、后自增、后自减语句中,换行可以完全替代分号的作用;

    5.var、if、do、while、for、continue、break、return、with、switch、throw、try、debugger关键字开头的语句以及空语句,上一行加不加分号影响不大。

  JavaScript不加分号的情况:

    如果一条语句以 “(” 、“[”、"+" 、“-”开始或有表达式语句和函数表达式语句,那么它极有可能和前一条语句在一起进行解释,JS不会自动补分号。这时如果前面没有分号隔开的话会很麻烦。

  下面我们来分别看看JS不会补加分号的这些情况下,代码是怎么样的。

  以“(”开头:

(function(){

}())
a = 1;
// JS解释上面语句:
(function () { }())a = 1;

  以“[”开头:

b = function() {

}
[1,2,3].forEach(function(i) { });
// JS解释上面语句:
b = function() { }[1,2,3].forEach(function(i) { });

  以“+”或“-”开头:

a = b
+ c
// JS解释上面语句:
a = b + c
a = b
- c
// JS解释上面语句:
a = b - c

  结论:

    加与不加是个人习惯问题,但是如果遇到必须添加分号的情况,我们还是不能马虎大意。因此为了严谨起见个人建议还是每句写完以后加一个分号。

关于JavaScript每句结尾是否需要添加分号问题的更多相关文章

  1. JavaScript: 高级技巧: window 对象也可以添加自定义属性

    JavaScript: 高级技巧: window 对象也可以添加自定义属性 例如 window.ntName = 'a';例如 window.ntXw = top; 优点是, window 无须等加载 ...

  2. [Effective JavaScript 笔记] 第6条:了解分号插入的局限

    分号可以省略 js可以在语句结束不强制加分号.(建议还是添加,不添加分号往往会出现不易发现的BUG) function Point(x,y){ this.x=x||0; this.y=y||0; } ...

  3. 走进javascript——不起眼的基础,值和分号

    值 有时我很想知道javascript解析引擎是如何区分一个变量的值,比如下面这段代码. var x = 'javascript'; //javascript x = "hello" ...

  4. 2分钟 sublime设置自动行尾添加分号并换行:

    18:03 2016/4/162分钟 sublime设置自动行尾添加分号并换行:注意:宏文件路径要用反斜杠/,2个\\会提示无法打开宏文件.不需要绝对路径很简单利用宏定义:1.录制宏:由于是录制动作宏 ...

  5. 关于visocode 自动保存时自动添加分号问题

    先下载插件:  Vueter 打开设置的配置文件,写入一下代码: // //是否需要保存时自动格式化 "editor.formatOnSave": true, //使js 文件保存 ...

  6. javascript的document中的动态添加标签

    document的高级篇中提供了节点操作的函数,具体包括:获取节点,改变节点,删除节点,替换节点,创建节点,添加节点,克隆节点等函数.我们可以利用这些函数动态改变html的节点. 1.JavaScri ...

  7. JavaScript案例二:在末尾添加节点

    简单实现通过JavaScript来增加HTML节点 <!DOCTYPE html> <html> <head> <title>JavaScript在末尾 ...

  8. java基础67 JavaScript通过关系找节点、添加附件(网页知识)

    1.通过关系找节点(父子关系,兄弟关系) 1.1.常用方法 parentNode:获取当前元素的父节点.    childNodes:获取当前元素的所有下一级子元素    firstChild:获取当 ...

  9. JavaScript高级 面向对象(1)--添加一个div标签

    说明(2017.3.28): 1. JavaScript是一种基于对象的多范式编程语言,不是面向对象,但离开对象不能活. 范式编程是指编程习惯.方式,分为过程式.对象式和函数式编程. 2. 面向对象是 ...

  10. JavaScript:一句代码输出重复字符串(字符串乘法)

    看到一个题目要求写一个函数times,输出str重复num次的字符串. 比如str:bac     num:3 输出:abcabcabc 除了利用循环还有几种方法,我学习研究之后记下以下三种方法. 1 ...

随机推荐

  1. google浏览器个人常用快捷键

    分享一下个人常用快捷键. 说明:字母排序规则遵循字母表(a->z) 快捷键 介绍 ctrl+0 恢复页面到100% ctrl+数字(1~9) 切换至序号对应的标签页 ctrl+d 将当前标签页添 ...

  2. 我的 Kafka 旅程 - broker

    broker在kafka的服务端运行,一台服务器相当于一个broker:每个broker下可以有多个topic,每个topic可以有多个partition,在producer端可以对消息进行分区,每个 ...

  3. 从SVN导出项目出现的乱码问题

    解决的方法很简单,只需要将Eclipse的编码标准设置为UTF-8即可 1.Window->Preferences->General->Workspace   面板Text file ...

  4. HFS局域网分享文件的神器(附下载链接)

    温馨提示,下载链接在页末 前言 假如说你需要传递个学习资料给好基友,我们有许多种方式可选:硬盘媒介.网络分享等. 要是论速度,还是得拿3.0或以上的U盘来拷贝,确实神速哈哈.但是其也有局限性,比如需要 ...

  5. 简单将Springboot项目部署到linux服务器上

    1.使用springboot的jar包方式 直接使用maven工具按照步骤点击就可以直接打包 2.到target目录下找到 jar包 3.将jar包放到linux的任意文件夹下(此项目是之前的kafk ...

  6. Java程序员必会Synchronized底层原理剖析

    synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用. 但不可否认的是synchr ...

  7. Vue3.x+element-plus+ts踩坑笔记

    闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...

  8. laravel 浏览器谷歌network返回报错html

    laravel 在谷歌报错的时候会返回html,对于调试来说很不方便.原因是在于: 这里返回的格式是json,但是报错时候返回的是整个html所以 相对路径: app\Exceptions\Handl ...

  9. 使用thymeleaf将查询的数据显示在前台。通过使用循环的形式

    1.需要注意的点. 在 <tr th:each="book:${bookList}">中.book是自己命令的变量.${bookList}是将查询的数据放入这里,需要后 ...

  10. JUC(8)Stream流式计算

    文章目录 1.ForkJoin 1.ForkJoin ForkJoin 在JDK1.7 ,并执行任务!提高效率,大数据量 大数据:Map Reduce (把大任务拆分为小任务) ForkJoin特点: ...