和其他编程语言一样,JavaScript使用分号(;)将语句分割.这堆增强代码的可读性和间接性是非常重要的:缺少分隔符,一条语句的结束就成了下一条语句的开始,反之亦然.
在JavaScript中,如果局域各自独占一行,通常可以省略语句之间的分号(程序结尾或者右花括号之前的分号也可以省略).许多JavaScript程序员使用分号来明确标记语句的结束(个人推荐).而另一种风格就是,在任何可以省略分号的地方都将其省略,只有在不得不用的时候才使用分号.不管采用那种编程风格,关于JavaScript中可选分号的问题有几细节需要注意.
1.
考虑下面代码,因为两条语句用两行书写,第一个分号是可以省略掉的:
a = 3; b = 4;
如果按照如下格式书写,第一个分号则不能省略掉
a = 3;b = 4;
注意:JavaScript并不是在所有换行都填补分号:只有缺少分号无法正确解析代码的时候,JavaScript才会填补分号.换句话说就是,如果当前语句和随后的非空格字符不能当成一个整体解释的话,JavaScript就在当前语句行结束处填补分号.如:
var a a = 3 console.log(a)
JavaScript将其解释为:
var a; a = 3; console.log(a);
JavaScript给第一行换行出添加了分号,因为如果没有分号,JavaScript就无法解析代码var a a.第二个a可以单独当做一条语句"a;",但JavaScript并没有给第二行结尾处添加分号,因为它可以和第三行内容一起解析成"a = 3;"
这种代码过多使用不但使人难以理解,而且使人逻辑混乱.考虑下面例子:
var y = x + f (a+b).toString()
JavaScript不会给第一行加上分号,因为第一行跟第二行似乎能后合并成
var y = x + f(a+b).toString()
显然这并不是我们想要的结果,所以必须手动加上分号.
2.
当在修改别人的代码的时候,因为不知道前面编码者的风格,所以很多程序员保守地在自己语句前面加上分号,这样就能保证前面的代码能正常执行,而保证新的代码不和旧的代码合并形成歧义.如上面的例子:
var y = x + f //上个编码者的代码 ;(a+b).toString() //加入的新代码
3.
1.return break continue所在行JavaScript一定会加上分号,例如;
return true
会被解析成
return; true;
2.涉及"++"和"--"运算符时,直接上例子:
x ++ y
会被解析为
x; ++y;
而不是
x++; y;