javascirpt一般采用分号(;)将语句分隔开,利于代码可读性和整洁性。但是js中可选分号的问题有几个细节:
1.js中分号可以省略;例如以下代码:
a=3;
b=4;
可将分号省略,但如果是
a=3;b=4
则不可省略,那是不是理解为可以用换行代替分号,不是的。
总的来说,javascript中,如果当前语句和随后的非空格字符不能当成一个整体来解析的话,js就在当前语句结束处填补分号。例如:
var a
a
=
50
console.log(a)
js将其解析为
var a; a=50; console.log(a);
因为在第一行中var a与第二行的a连贯不能构成一句语句,所以js为第一句添加分号,接下去的几句也是同样的道理。语句的分隔规则往往会造成一定的误会,例如:
var y=a+f
(a+b).toString()
按照理解,js会将其解释为var y=x+f(a+b).toString();故而该加引号还是要加。
2.那上述规则有没有例外呢?有两个例外。
(1)涉及return,break,continue语句,如果这三个关键字后面紧跟着换行,js会直接添加分号,而不会去看与下一行能否形成可解释的语句。
function f1()
{
return{
bar: "hello"
};
}
function f2()
{
return
{
bar: "hello"
};
}
函数f1与f2返回值会有所不同,f2返回值为undefined,因为return后直接添加了;。
(2)第二个例外是在涉及“++”,“--”运算符的时候,如果将其作为表达式后缀,它和表达式应在同一行,否则行尾会添加分号,同时将++,--作为下一行的前缀。
x
++
y
这段代码将被解析为x;++y,而不是x++;y。