JavaScript分号使用指南

2,362 阅读2分钟

关于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*/}       // 语法错误