如何防止JavaScript自动插入分号


Posted in Javascript onNovember 05, 2015

 在 JavaScript 中,行尾的分号有一种自动插入机制,这样子,可以容忍某些朋友忽略了输入分号。 当然你最好养成输入分号的习惯,同时掌握 JavaScript 是如何处理忽略输入分号的情况的,因为这种知识有助于你理解没有分号的代码。

JavaScript语言有一个机制:在解析时,能够在一句话后面自动插入一个分号,用来修改语句末尾遗漏的分号分隔符。然而,由于这个自动插入的分号与JavaScript语言的另一个机制发生了冲突,即所有空格符都被忽略,因此程序可以利用空格格式化代码。

    这两种机制的冲突,很容易掩盖更为严重的解析错误。有时会不合时宜地插入分号。例如,在return语句中自动插入分号将会导致这样的后果:如果return语句要返回一个值,这个值的表达式的开始部分必须和return在同一行上,例如:

var f = function(){
 return
 {
 status: true
 };
 }

    看起来这里要返回一个包含status成员元素的对象。不幸的是,JavaScript自动插入分号让它返回了undefined,从而导致下面真正要返回的对象被忽略。

    当自动插入分号导致程序被误解时,并不会有任何警告提醒。如果把{放在上一行的尾部而不是下一行的头部,就可以避免该问题,例如:

var f = function(){
 return {
 status: true
 };
 }

    为了避免省略分号引起的错误,建议养成好的习惯,不管一行内语句是否完整,只要是完整的语句都必须增加分号以表示句子结束。

    为了方便阅读,当长句子需要分行显示时,在分行时应确保一行内不能形成完整的逻辑语义。例如,下面代码是一条连续赋值的语句,通过分行显示可以更清楚地查看它们的关系。这种分行显示,由于一行内不能形成独立的逻辑语义,因此JavaScript不会把每一行视为独立的句子,从而不会产生歧义。

var a =
 b =
 c = 4;

    以上语句在一行内显示如下: var a = b = c = 4;

    对于下面这条语句,如果不能正确分行显示,就很容易产生歧义。该句子的含义:定义一个变量i,然后为其赋值,如果变量a为true,则赋值为1,否则就判断变量b,如果b为true,则赋值为2,否则就判断变量c,如果c为true,则赋值为3,否则赋值为4.

var i = a ? 1 : b ? 2 : c ? 3 : 4;

    下面的分行显示就是错误的,因为表达式a ? 1: b能够形成独立的逻辑语义,所以JavaScript会自动在其后添加分号来表示一个独立的句子。

var i = a ? 1: b
 ? 2 : c
 ? 3 : 4;

    安全的方法应该采用如下的分行显示,这样每一行都不能形成独立的语义。

var i = a ? 1
 : b ? 2
 : c ? 3
 : 4;

    总之,在编写代码时,应养成使用分号结束句子的良好习惯,凡是完整的句子就应该使用分号进行分隔。分行显示的句子应该确保单行不容易形成独立的合法的逻辑语义

PS:示例详解javascript自动在行尾添加分号

 分号(;),通常会用在一行语句的结尾,代码如下:

var webName = "三水点靠木";
var url = 3water.com;

上面的代码,在每一个声明语句后面都添加了分号,这不用多解释。

var webName = "三水点靠木"
var url = 3water.com

其实分号也完全可以省略,但是省略的这个分号,会在编译阶段自动为其添加分号。
再来看一段代码实例:

function done(webName){
 return
 webName
}
console.log(done("三水点靠木"));

由于编译器会在每一行后面都自动添加了分号,所以输出值undefined,不是"三水点靠木"。

Javascript 相关文章推荐
ECMAScript 基础知识
Jun 29 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
Oct 24 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
JavaScript编写简单的计算器
Nov 25 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
Vue2.0用户权限控制解决方案的示例
Feb 10 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
node全局变量__dirname与__filename的区别
Jan 14 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
Sep 21 Javascript
JS数据类型STRING使用实例解析
Dec 18 Javascript
javascript常用函数(2)
Nov 05 #Javascript
使用JavaScript和CSS实现文本隔行换色的方法
Nov 04 #Javascript
javascript常用函数(1)
Nov 04 #Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
Nov 04 #Javascript
jQuery多条件筛选如何实现
Nov 04 #Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
Nov 04 #Javascript
js数组去重的5种算法实现
Nov 04 #Javascript
You might like
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python线程的两种编程方式
2015/04/14 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python实现画一颗树和一片森林
2018/06/25 Python
python实现在一个画布上画多个子图
2020/01/19 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
会计电算化专业毕业生自荐信
2013/12/20 职场文书
工作失职检讨书500字
2014/10/17 职场文书
运动会广播稿50字
2015/08/19 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python
Python图像处理之图像拼接
2021/04/28 Python
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
JavaScript的function函数详细介绍
2021/11/20 Javascript