语句和表达式
// 推荐,好的写法
if (condition) {
doSomething();
}
// 不好的写法,尽管是合法的js代码
if (condition) doSomething();
if (condition) { doSomething(); }
块语句的间隔
if (condition) {
doSomething();
}
Switch语句的缩进
1.第一种缩进格式
// 个人比较喜欢的格式
switch(condition) {
case "first":
// 代码
break;
case "second":
// 代码
break;
case "third":
// 代码
break;
default:
// 代码
}
- 每条case语句相对于switch关键字都缩进一个层级;
- 从第二条case语句开始,每条case语句前后各有一个空行。
2.第二种缩进格式
// Crockford的编程规范和Dojo编程风格指南推荐以下的格式
switch(condition) {
case "first":
// 代码
break;
case "second":
// 代码
break;
case "third":
// 代码
break;
default:
// 代码
}
几个注意点
- case语句的“连续执行”
- default:在没有默认行为并且写了注释的情况下可以省略defalut
for循环
for循环有两种:传统的for循环和for-in循环。
1.传统的for循环往往用于遍历数组成员,比如:
var values = [ 1, 2, 3, 4, 5, 6, 7],
i, len;
for (i= 0, len=values.length; i < len; i++) {
process(values[i]);
}
有两种方法可以更改循环的执行过程:
- 第一种方法是使用break语句,立即退出循环。
// 使用break语句
var values = [ 1, 2, 3, 4, 5, 6, 7],
i, len;
for (i= 0, len=values.length; i < len; i++) {
if (i == 2) {
break; // 迭代不会继续
}
process(values[i]);
}
// 这里的循环体只执行了两次,在第三次执行process()之前就终止循环了,
- 第二种方法是使用continue语句,立即退出本次循环,而进入下一次循环迭代。作者推荐尽可能避免使用continue,避免JSLint给出警告。
// 使用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]);
}
// 这里的循环体将执行两次,跳过第三次迭代,而进入第四次迭代,直到最后一次迭代。
2.for-in循环是用来遍历对象属性的
var prop;
for (prop in object) {
console.log("Property name is " + prop);
console.log("Property value is " + object[prop]);
}
使用for-in循环的注意点:
- 它不仅遍历对象的实例属性,还遍历从原型继承来的属性。当遍历自定义对象的属性时,往往会因为意外的结果而终止,最好使用hasOwnProperty()方法来为for-in循环过滤出实例属性。
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;
for (i in values) {
process(items[i]);
}
for-in循环是用来对实例对象和原型链中的键(key)做遍历的,而不是用来遍历包含数字索引的数组的。