关于JavaScript写不写分号的问题,争论一直存在!一个良好的开发习惯固然重要,作为菜鸟程序员也应该要了解什么地方必须加,什么地方可不加,相信对于一名老的JavaScript开发者而言加分号的地方可能已成了肌肉记忆!
必填:当两个语句位于同一行的时候
分号只是当你在同一行有两个或两个以上的语句时才必须使用,但在换行符之前分号是可选的。
var i = 0; i++ // 必须使用分号
// 换行符之前分号可选
var i = 0 // 分号可选
i++ // 分号可选
可选:语句结尾
JavaScript中的分号用于分隔语句,但是如果该语句后跟换行符(或{block}
中只有一个语句),则可以省略分号。语句是一段代码,它告诉计算机执行某项操作,下面是最常见的语句类型。
var i; // 变量声明
i = 5; // 赋值
i = i + 1; // 赋值
i++; // 赋值
var x = 9; // 声明 & 赋值
var fun = function() {...}; // 声明方法
alert("hi"); // 函数调用
所有这些语句都是以分号结尾,但它们都不是必须的。有些人认为用每一个语句结束都以分号结尾是一个好习惯;这只是使您的代码更易于解析和压缩,如果压缩时删除语句结尾的换行符,则不必担心多个语句以相同的分号结尾,造成代码执行异常。
以下情况避免使用分号
1.在花括号后
您不应该在大括号}
后加上分号,唯一的例外是赋值语句,例如var obj = {} ;
,请参见上文。
// 结尾不需要分号:
if (...) {...} else {...}
for (...) {...}
while (...) {...}
// 除外:
do {...} while (...);
// 方法声明:
function (arg) { /*do something...*/ } // 不需要分号
2.if,for,while或switch语句的圆括号后
在if语句的{}后面加上分号不会有什么问题(它将被忽略,并且您可能会看到警告,它是不必需的)。但是在if,for,while或switch语句的回合括号之后加分号,可能会带来意想不到的结果。
if (0 === 1); { alert("hellow") }
// 相当于:
if (0 === 1) /*do nothing*/ ;
alert ("hi");
以上代码会弹窗提示“hellow”,但不是因为0等于1,而是因为分号的原因导致的结果。它使JavaScript认为您那里有一个空语句,并且它右边的所有内容都被视为不再属于if条件,因此独立于if。
例外: 在for循环的()内,分号仅在第一和第二条语句之后存在,而在第三条之后将会提示语法错误:
for (var i=0; i < 10; i++) {/*actions*/} // 正确
for (var i=0; i < 10; i++;) {/*actions*/} // 语法错误