在JavaScript中,诸如 if 和 for 之类的语句有两种写法,使用花括号包裹的多行代码和不使用花括号的单行代码。比如:
//不好的写法
if(condition)
doSomething();
//不好的写法
if(condition) doSomething();
//好的写法
if(condition){
doSomething();
}
//不好的写法
if(condition) { doSomething(); }
所有的块语句都应当使用花括号,包括:
- if
- for
- while
- do...while...
- try...catch...finally
3.1 花括号的对齐方式
推荐将左花括号放置在语句中第一句代码的末尾
3.2 块语句间隔
推荐在做圆括号之前和又圆括号之后各放一个空格,例如:
if (condition) {
doSomething();
}
3.3 switch语句
switch (condition) {
case "first":
//代码
break;
case "second":
//代码
break;
case "third":
//代码
break;
default:
//代码
}
- case一个层级的缩进,break又一个层级的缩进。
- 从第二个case开始,前边空一行
- default不省略,即使没有任何执行语句
3.4 with语句
var book = {
title : "编写可维护的JavaScript",
author : "Nicholas C. Zakas"
};
var message = "The Book is ";
with (book) {
message += title;
message += " by " + author;
}
这个例子中我们分不出message到底是一个局部变量还是book的一个属性,JavaScript引擎和压缩工具也无法对这段代码进行优化,因为他们无法猜出代码的真正含义。
所以,禁止使用with语句。
3.5 for循环
for循环有两种方法可以更改执行过程,一个是break,跳出整个循环;另一个是continue,跳出当前循环。不推荐使用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循环
1、for-in有一个问题,他不仅遍历对象的实例属性,同样遍历从原型链继承过来的属性。出于这个原因,使用hasOwnProperty()方法来为for-in循环过滤出实例属性,如:
var prop;
for (prop in object) {
if(object.hasOwnProperty(prop)) {
doSomething();
}
}
除非你想要遍历原型链属性,可以去掉hasOwnProperty()方法,但要在注释中说明。
2、for-in是用来遍历对象的,不要用来遍历数组:
//不好的写法
var values = [ 1, 2, 3, 4, 5 ],
i;
for (i in object) {
process(items[i]);
}