可能一开始你会觉得并无必要,但相信我,你将来会主动想要尽可能写好代码的注释的。当你几个月后再回看某项目时,结果却发现很难想起当时写某句东西时脑子在想的什么了,是不是很让人沮丧呢?或者,如果有同事要修订你的代码呢?一定,一定要为你代码里的重要部分加上注释。
复制内容到剪贴板代码:
// 遍历数组,输出各自名称
for(var i = 0, len = array.length; i < len; i++) {
console.log(array);
}
10. 试试渐进增强
一定要记得为未启用JavaScript的情况提供替代方案。大家可能会认为,“大部分我的访客都启用了JavaScript的,我才不用担心”。这样的话,你可就大错特错了!
你有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了?(你可以下载 Web Developer ToolBar 轻松完成这项任务。)禁用之后你的网站可能就彻底失去了可用性!经验之谈:开发初期总是按照没有JavaScript来设计你的网站,之后再进行渐进地功能增强,小心翼翼地改变你地布局。
11. 不要传递字串给 “setInterval” 或 “setTimeout”
看看下面的代码:
复制内容到剪贴板代码:
setInterval(
"document.getElementById('container').innerHTML += 'My new number: ' + i", 3000
);
不仅执行不高效,而且和 eval 函数有着同样的高风险。千万不要把字串传递给 setInterval 和 setTimeout。恰当的做法是,传递一个函数名:
复制内容到剪贴板代码:
setInterval(someFunction, 3000);
12. 不要使用with语句
初识之下,“with”语句似乎还挺好用的。它用于设置代码在特定对象中的作用域。其基本用法是提供深入到对象中处理元素的快速写法。例如:
复制内容到剪贴板代码:
with (being.person.man.bodyparts) {
arms = true;
legs = true;
}
– 等价于 —
复制内容到剪贴板代码:
being.person.man.bodyparts.arms = true;
being.person.man.bodyparts.legs= true;
不幸的是,测试表明,若你要为对象插入新成员,with的表现非常糟糕,它的执行速度非常缓慢。替代方案是声明一个变量:
复制内容到剪贴板代码:
var o = being.person.man.bodyparts;
o.arms = true;
o.legs = true;
13. 使用 {},而不用New Object()
在JavaScript有多种方式能新建对象。最传统的方法是 new 语句,如下:
复制内容到剪贴板代码:
var o = new Object();
o.name = 'Benhuoer';
o.lastName = 'Yang';
o.someFunction = function() {
console.log(this.name);
}
不过,这一方法读起来却比较糟糕。我强烈建议你采用下面这种在文字样式上更为强健的写法:
更好的写法
复制内容到剪贴板代码:
var o = {
name: 'Jeffrey',
lastName = 'Way',
someFunction : function() {
console.log(this.name);
}
};
注意,如果你想新建一个空对象,用 {} 就能行:
复制内容到剪贴板代码:
var o = {};
引用:
“对象字面符(Objects literals)帮助我们写出支持很多特性,同时又关联性强、简明直接的代码。没必要直接调用新建语句,然后再费心维护声明变量和传递变量的语句之间的正确顺序,等等。” – dyn-web.com
14. 使用[],而不用New Array()
新建数组时的同类型运用。
行得通的写法
复制内容到剪贴板代码:
var a = new Array();
a[0] = "Joe";
a[1] = 'Plumber';
更好的写法
复制内容到剪贴板代码:
var a = ['Joe','Plumber'];
引用:
“在JavaScript编程中经常遇到的一个错误是,该用数组时却用了对象,该用对象时却用了数组。规则其实很简单:当属性名是小的连续整数时,你应该使用数组。其他情况,使用对象。” – Douglas Crockford
15. 一长列变量声明?别写那么多var,用逗号吧
复制内容到剪贴板代码:
var someItem = 'some string';
var anotherItem = 'another string';
var oneMoreItem = 'one more string';
更好的写法
复制内容到剪贴板代码:
var someItem = 'some string',
anotherItem = 'another string',
oneMoreItem = 'one more string';
…不言自明。我不知道这样做能否提升代码执行速度,但是确实让你的代码干净许多。
17. 千万千万记得写分号
大部分浏览器都允许你不写句尾分号:
复制内容到剪贴板代码:
var someItem = 'some string'
function doSomething() {
return 'something'
}
之前已经说过,这样做会造成潜在的更大、更难以发现的问题:
更好的写法
复制内容到剪贴板代码:
var someItem = 'some string';
function doSomething() {
return 'something';
}
18. “For in” 语句
遍历对象时,你可能会发现你还需要获取方法函数。所以遇到这种情况时,请一定记得给你的代码包一层 if 语句,用以过滤信息。
复制内容到剪贴板代码:
for(key in object) {
if(object.hasOwnProperty(key) {
...then do something...
}
}
19. 使用Firebug的“Timer”功能优化你的代码