javascript有自动添加分号的功能,但是不是所有情况都会自动添加,要区分:
1,如果语句独占一行
如果当前行内的语句能够被js正确解析,那么就会在句尾添加一个分号。
(如何判断是否正确解析?你在控制台执行当前语句,不报错就可以-。-)
那么反之,如果当前语句不能被正确解析,那么就不会添加分号,而是将此行的末尾和下一行的开头连起来解析,所以就会产生其他问题。
a=1
b=1;
// 第一个分号可以省略
var a
a
=
1
// 解析为 var a; a = 1; 因为等号是没办法解析的,所以必须将上面和下面联系起来,虽然a是可以解析的,因为上面已经声明了变量a
2,return , continue, break的换行处
如果上面三个关键字后换行了,那么会直接在后面加分号,所以如果有表达式要跟在后面,一定不能换行。
return
true;
// 解析成return; true; 而不是return true;
3,代码块之后不能添加分号
比如if语句的代码块,for循环的代码块等等,后面不能手动写分号
4,以"(" , "[" , "/" , "+" , "-"开始的语句
如果一条语句以上面几个开始,那么它上面一行的代码结尾一定不能漏掉分号,尽管上一条语句可以单独被正确解析,例如
var a
[]
// 报错
var a;
[]
// 不报错
5,"++" , "--"也比较特殊
如果将其作为后缀表达式,它和表达式在同一行,否则,行尾填补分号,同时“++”和“--”作为下一行代码的前缀操作符:
x
++
y
//解析为 x; ++y; 而不是我们期望的 x++; y;