JavaScript夯实基础--关于分号

和其他许多编程语言一样,JavaScript使用分号(;)将语句分隔开,这对增强代码的可读性一整洁性是非常重要的,缺少分隔符,一条语句的结束就成了下一条语句的开始,反之亦然。在JavaScript中,如果语句各自独占一行,通常可以省略语句之前的分号(程序结尾或右花括号之前的分号也可省略)。不过关于JavaScript中可选的分号有几细节需要注意。

JavaScript并不是在所有换行处都填补分号:只有在缺少分号就无法正确解析时,才会填补分号。换句话说,如果当前语句和随后的非空格字符不能当成一个整体来解析的话,就在当前语句行结束处填补分号。如下代码:

var a
a
=
3
console.log(a)

将会被解析为

var a; a=3; console.log(a);

JavaScript给第一行换行处添加了分号,因为如果没有分号,JavaScript就无法解析代码。第二个a可以单独当做一条语句"a;",但JavaScript并没有给第二行结尾处填补分号,因为它可以和第三行内容一起解析成"a=3;"。

这些语句的分隔规则会导致一些意想不到的情形,下面这段代码写成了两行,看起来是两条独立的语句:

var y=x+f
(a+b).toString()

但第二行的圆括号却和第一行的f组成了一个函数调用,JavaScript会把这段代码看做:

var y=x+f(a+b).toString();

而这段代码的本意并不是这样。为了能让上述代码解析为两条不现的语句,必须手动填写行尾的显式分号。

通常来讲,如果一条语句以"(","[","/","+"或"-"开始,那么它极有可能和前一条语句合在一起解析。以"/","+"和"-"开始的语句并不常见,而以"("和"["开始的语句则非常常见,至少在一些JavaScript编码风格中是很普遍的。有些程序员喜欢保守地在语句前加一个分号,这样哪怕之前的语句被修改了,分号被误删除了,当前语句还是会正确地解析:

var x=0
;[x,x+1,x+2].forEach(console.log)  //前面的分号保证了正确的被解析

如果当前语句和下一行语句无法合并解析,则在第一行后填补分号,这是通用规则,但有两个例外。

第一个是在涉及return, break和continue语句的场景中,如果这三个关键字后紧跟着换行,JavaScript则会在换行处填补分号

return
true;

JavaScript会解析成

return;
true;

而代码的本意是

return true;

也就是说,在return, break和continue和随后的表达式之前不能有换行。如果了换行,程序则只有在极特殊的情况下才会报错,而且程序的调试非常不方便。

第二个例外是在涉及到"++"和"--"运算符的时候。这些运算符可以作为表达式的前缀,也可以当作表达式的后缀。如果将其做后缀表达式,它和表达式应当在同一行。否则,行尾将填补分号,同时"++"和"--"将会作为下一行代码的前缀操作符并与之一起解析,例如,这段代码:

x
++
y

将被解析为

x;++y;

而不是

x++;y;

JavaScript夯实基础--关于分号

时间: 2024-10-08 12:15:02

JavaScript夯实基础--关于分号的相关文章

JavaScript夯实基础系列(四):原型

??在JavaScript中有六种数据类型:number.string.boolean.null.undefined以及对象,ES6加入了一种新的数据类型symbol.其中对象称为引用类型,其他数据类型称为基础类型.在面向对象编程的语言中,对象一般是由类实例化出来的,但是在JavaScript中并没有类,对象是以与类完全不同的设计模式产生的. 一.创建对象 ??最常用来创建的方式是通过对象字面量的方式,简单便捷.但是该方式为单例模式,如果创建类似的对象会产生过多重复的代码,如下代码所示: var

javascript的基础知识及面向对象和原型属性

自己总结一下javascript的基础知识,希望对大家有用,也希望大家来拍砖,毕竟是个人的理解啊 1.1 类型检查:typeof(验证数据类型是:string) var num = 123; console.log(typeof num); // 1.2 in 运算符 作用:判断指定属性是否存在于指定的对象中. 如果指定的属性存在于指定的对象中,则 in 运算符会返回 true. 语法: 属性 in 对象 返回值:true 或者 false 示例: var obj = { age: 18 };

javaScript的基础(1)

JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript 微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

JavaScript 语言基础知识点总结(思维导图)

1.JavaScript数组 2.JavaScript 函数基础 3.Javascript 运算符 4.JavaScript 流程控制 5.JavaScript 正则表达式 6.JavaScript 变量 7.JavaScript 字符串函数 8.DOM 基本操作

JavaScript语言基础知识点图示

原文:JavaScript语言基础知识点图示 一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.JavaScript 流程控制 6.JavaScript 函数基础 7.DOM 基本操作 8.Window 对象 9.JavaScript 字符串函数 10.正则表达式 JavaScript语言基础知识点图示,布布扣,bubuko.com

javascript语法基础-变量与函数

三 javascript语法基础-变量与函数 (一)变量的声明与运用 JavaScript中的变量与Java.C等强类型语言有很大区别,虽然在JavaScript中具有字符串.数字等数据类型. 变量申明语句的结构是var保留字加标识符,var和标识符之间用空格隔开. 赋值语句的结构是在变量和需要赋的值之间加上一个等号,例如a=1的含义是将变量a的值指定为1. 变量在定义的时候也可以同时赋值,如var a=1. PS:在变量使用前事先进行声明是个良好的编程习惯,这对将来学习Java等其他语言有帮助

夯实基础——快速排序

逻辑结构:递归栈 物理结构:数组 快速排序分析: 最优时间复杂度:O(nlog2n)在乱序情况下 最坏时间复杂度:O(n^2) 在顺序情况下 平均时间复杂度:O(nlog2n) 空间复杂度:O(n) 稳定性:不稳定 快速排序主要有两个函数: 1 一次划归 int partition(int a[],int low,int high); 2 递归快速排序 void QuickSort(int a[],int low,int high); 3 非递归快速排序 void NonQuickSort(in

JavaScript RegExp 基础详谈

前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究.学习.掌握,而是抱着需要的时候,就去网上找现成的正则表达式来使用,像这样恐怕永远都是很难对正则有一个详细且全面的了解. 所以通过查阅书籍.网上的资料以及通过自己的理解.组织.表达,写了这篇<JavaScript RegExp 基础详谈>,算是对自己学习过程的一次总结梳理吧. 如果有什么欠缺,遗漏或者不足的地方,多多麻烦大家的