譯文原文:《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代碼編輯器中,可以很好發現不必要的分號——或者錯誤的分號。
它會在代碼行中向你展示黃色的警告三角形。講鼠標懸停在一個三角形上將告訴你是否存在缺少的分號或者不必要的分號。一般情況下,你可以信任這些警告,直到你對使用分號的位置和不使用的直覺有所瞭解。