所有的块语句都应当使用花括号,包括:
- if
- for
- while
- do…while…
- try…catch…finally
3.1 花括号的对齐方式
风格:左花括号放置在块语句中第一句代码的末尾。
示例:
if (condition) {
doSomething();
} else {
doSomethingElse();
}
3.2 块语句间隔
风格:在左括弧之前和右括弧之后各添加一个空格
示例:
if (condition) {
doSomething();
}
3.3 switch语句
switch语句中可以使用任意类型值,任何表达式都可以合法地用于case从句。
3.3.1 缩进
风格:
- 每条case语句相对于switch关键字都缩进一个层级
- 从第二条case语句,每条case语句前后各有一个空行
示例:
switch (condition) {
case "first":
// 代码
break;
case "second":
// 代码
break;
case "third":
// 代码
break;
default:
// 代码
}
3.3.2 case语句的“连续执行”
case的连续执行(fall through)是一种可接受的编程方法,程序的逻辑要清晰,并且有意添加注释。
示例:
switch (condition) {
// 明显的依次执行
case "first":
case "second":
// 代码
break;
case "third":
// 代码
/* fall through */
default:
// 代码
}
3.3.3 default
如果没有default,可以加一行注释。
示例:
switch (condition) {
case "first":
// 代码
break;
case "second":
// 代码
break;
// 没有 default
}
3.4 with语句
避免使用with语句
3.5 for循环
传统for循环用于遍历数组成员。break语句和continue语句可以更改循环的执行过程,continue语句可以用if语句代替。
示例:
var values = [1, 2, 3, 4, 5, 6, 7],
i, len;
for (i = 0, len = values.length; i < len; i++) {
if (i === 2){
// break提前结束循环
break;
}
process(values[i]);
}
for (i = 0, len = values.length; i < len; i++) {
if (i === 2){
// 不执行此次迭代
continue;
}
process(values[i]);
}
for (i = 0, len = values.length; i < len; i++) {
// 用if语句替代continue
if (i !== 2){
process(values[i]);
}
}
3.4 for-in 循环
for-in循环用来遍历对象属性,返回属性名而不是值。for-in会遍历对象从原型中带来的属性。可用 hasOwnProperty() 方法过滤实例属性。
var prop;
for (prop in object) {
// 检查是否是实例属性
if (object.hasOwnProperty(prop)) {
console.log("Property name is " + prop);
console.log("Property value is " + object[prop]);
}
}
注意,for-in是遍历对象的,禁止遍历数组。
// 不好的用法,用来遍历数组
var values = [1, 2, 3, 4, 5, 6, 7],
i, len;
for (i in values) {
process(items[i]);
}