译文原文:《Your Guide to Semicolons in JavaScript》
这是一篇由主持人Alex J发布的客座文章。如果你在论坛遇到他,记得向他问好!你何时需要用分号?这是一个备忘单!
必需:当两个语句在同一行时
只有在同一样有两条或更多语句时,分号才是必须的。
var i = 0; i++ // <-- 分号是必须的
// (但换行前是非强制的(译文原词是optional,表示分号可写,可不写))
var i = 0 // <-- 分号是非强制的
i++ // <-- 分号是非强制的
可选:在语句后
在JavaScript中分号用来分隔语句,但是如果语句后跟换行符(或在一个{}的语句块中只有一条语句),那么它可以省略。一个语句就是是一段告诉计算机做什么的代码。以下就是常见的声明类型:
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 this*/ } // 右花括号}后面没有分号
2.在if、for、while或switch语句的圆括号后
在if语句的花括号{}后使用分号没有害处(它将会被忽略,你可能看到一个不必要的警告)。但是分号在不应在的地方出现(诸如在if、for、while或switch语句的圆括号后)是一个非常糟糕的主意:
if (0 === 1); { alert("hi") }
// 等价于:
if (0 === 1) /*do nothing*/ ;
alert ("hi");
这段代码将会执行警告“hi”,但是并不是因为0等于1,而是因为分号。它令JavaScript认为你在那里有一个空语句,并且它右边的一切都认为不再属于if条件,因此和if条件语句不相关。
当然有一个例外……
一个重要的怪事:for循环中的圆括号内,分号只出现在第一和第二条语句后,从来没有在第三条语句后:
for (var i=0; i < 10; i++) {/*actions*/} // 正确
for (var i=0; i < 10; i++;) {/*actions*/} // 语法错误
如何修复分号错误
JavaScript语法校对工具JSLint,它集成在Codecademy代码编辑器中,可以很好发现不必要的分号——或者错误的分号。
它会在代码行中向你展示黄色的警告三角形。讲鼠标悬停在一个三角形上将告诉你是否存在缺少的分号或者不必要的分号。一般情况下,你可以信任这些警告,直到你对使用分号的位置和不使用的直觉有所了解。