在JavaScript中,諸如 if 和 for 之類的語句有兩種寫法,使用花括號包裹的多行代碼和不使用花括號的單行代碼。比如:
//不好的寫法
if(condition)
doSomething();
//不好的寫法
if(condition) doSomething();
//好的寫法
if(condition){
doSomething();
}
//不好的寫法
if(condition) { doSomething(); }
所有的塊語句都應(yīng)當(dāng)使用花括號,包括:
- if
- for
- while
- do...while...
- try...catch...finally
3.1 花括號的對齊方式
推薦將左花括號放置在語句中第一句代碼的末尾
3.2 塊語句間隔
推薦在做圓括號之前和又圓括號之后各放一個(gè)空格,例如:
if (condition) {
doSomething();
}
3.3 switch語句
switch (condition) {
case "first":
//代碼
break;
case "second":
//代碼
break;
case "third":
//代碼
break;
default:
//代碼
}
- case一個(gè)層級的縮進(jìn),break又一個(gè)層級的縮進(jìn)。
- 從第二個(gè)case開始,前邊空一行
- default不省略,即使沒有任何執(zhí)行語句
3.4 with語句
var book = {
title : "編寫可維護(hù)的JavaScript",
author : "Nicholas C. Zakas"
};
var message = "The Book is ";
with (book) {
message += title;
message += " by " + author;
}
這個(gè)例子中我們分不出message到底是一個(gè)局部變量還是book的一個(gè)屬性,JavaScript引擎和壓縮工具也無法對這段代碼進(jìn)行優(yōu)化,因?yàn)樗麄儫o法猜出代碼的真正含義。
所以,禁止使用with語句。
3.5 for循環(huán)
for循環(huán)有兩種方法可以更改執(zhí)行過程,一個(gè)是break,跳出整個(gè)循環(huán);另一個(gè)是continue,跳出當(dāng)前循環(huán)。不推薦使用continue,例如:
//不推薦的寫法
var values = [ 1, 2, 3, 4, 5, 6, 7 ],
i,len;
for (i=0, len=values.length; i < len; i++ ) {
if ( i == 2) {
continue;
}
process(values[i]);
}
//推薦的替代寫法
var values = [ 1, 2, 3, 4, 5, 6, 7 ],
i,len;
for (i=0, len=values.length; i < len; i++ ) {
if ( i != 2) {
process(values[i]);
}
}
3.6 for-in循環(huán)
1、for-in有一個(gè)問題,他不僅遍歷對象的實(shí)例屬性,同樣遍歷從原型鏈繼承過來的屬性。出于這個(gè)原因,使用hasOwnProperty()方法來為for-in循環(huán)過濾出實(shí)例屬性,如:
var prop;
for (prop in object) {
if(object.hasOwnProperty(prop)) {
doSomething();
}
}
除非你想要遍歷原型鏈屬性,可以去掉hasOwnProperty()方法,但要在注釋中說明。
2、for-in是用來遍歷對象的,不要用來遍歷數(shù)組:
//不好的寫法
var values = [ 1, 2, 3, 4, 5 ],
i;
for (i in object) {
process(items[i]);
}