用===代替==
JavaScript里有两种不同的相等运算符===|!==和==|!=相比之下前者更值得推荐请尽量使用前者
引用:
“如果两个比较对象有着同样的类型和值===返回true!==返回false”
–JavaScript:TheGoodParts
不过如果使用==和!=在操作不同数据类型时你可能会遇到一些意想不到的问题在进行相等判断前JavaScript会试图将它们转换为字符串数字或Boolean量
避免使用Eval函数
Eval函数把一个字串作为参数并把字串作为JavaScript语句执行返回结果(参考)
此函数不仅会降低你脚本的执行效率而且还大大增加了安全风险因为它赋予了作为文本的参数太大的权利千万别用!
不要使用快速写法
技术上说你可以省略掉大部分花括弧和句尾分号绝大多数浏览器都能正确执行以下语句
复制内容到剪贴板代码:
if(someVariableExists)
x=false
不过如果是这样的呢
复制内容到剪贴板代码:
if(someVariableExists)
x=false
anotherFunctionCall();
你可能会认为它和下面的语句相等
复制内容到剪贴板代码:
if(someVariableExists){
x=false;
anotherFunctionCall();
}
不幸的是事实并非如此现实情况是它等价于
复制内容到剪贴板代码:
if(someVariableExists){
x=false;
}
anotherFunctionCall();
如您注意到的再漂亮的缩进也不能代替这华丽的花括弧在所有情况下都请写清楚花括号和句尾分号在只有一行语句的时候能偶尔省略掉虽然下这么做也是极度不被推荐的
复制内容到剪贴板代码:
if(+===)return’nicelydone’;
多考虑下将来吧孩子
假设在将来的开发过程中你需要为这个if语句添加更多的命令呢?到时候你还不是得把括号给加上?
好好利用JSLint
JSLint是由DouglasCrockford编写的一个调试器你只需要贴上你的代码它就能快速为您扫描出任何明显的错误和问题
引用:
“JSLint扫描接收的代码发现问题描述问题并给出其在源码中的大概位置可发现的问题包括但不限于语法错误虽然语法错误确实是最常见的JSLint也会用
约定俗成的习惯检查代码的格式化风格以及结构错误通过JSLint的扫描并不能保证你的程序就完全正确它只是为您提供了额外一双发现错误的眼睛”
–JSLint文档
完成代码之前把它放到JSLint里检查一下快速消灭你的无心之过
在页面底部加载脚本
正如下图所示
请记住——我们要千方百计保证客户端的页面载入速度尽可能的快而脚本没载入完成浏览器就没法加载页面的剩余部分
如果你的JS文件只是添加一些额外功能——例如为点击某链接绑定事件——那大可以等页面加载基本完成后再做把JS文件放到页面最后body的结束标签之前这样做最好了
更好的写法是
复制内容到剪贴板代码:
<p>超哥是世界上最帅的人benhuoercom是世界上最好看的博客</p>
<scripttype="text/javascript"src="path/to/filejs"></script>
<scripttype="text/javascript"src="path/to/anotherFilejs"></script>
</body>
</html><!mce:><!mce:>
在For语句外部声明变量
当需要执行冗长的for语句时不要让JavaScript引擎每次都重复那些没有必要的操作例如
这样不好
复制内容到剪贴板代码:
for(vari=;i<someArraylength;i++){
varcontainer=documentgetElementById(’container’);
containerinnerHtml+=’mynumber:’+i;
consolelog(i);
}
这段代码每次都重新定义数组长度每次都在遍历DOM寻找container元素——太傻了!
这样好多了
复制内容到剪贴板代码:
varcontainer=documentgetElementById(’container’);
for(vari=len=someArraylength;i<len;i++){
containerinnerHtml+=’mynumber:’+i;
consolelog(i);
}
我要给留言改进这段代码的人额外惊喜!欢迎大家留言讨论!
快速构建字串
要对一个数组或对象做循环操作时不要老惦记着一表人才的for语句拿点创意出来嘛!明明就还有很多更快的办法
复制内容到剪贴板代码:
vararr=[’item’’item’’item’];
varlist=’<ul><li>’+arrjoin(’</li><li>’)+’</li></ul>’;
引用:
“没那么多繁文缛节来烦你你就信我一次好了(或者你也可以自己试一试)——这真的是迄今能找到的最快办法了!
用点土办法也别管它背后究竟发生了什么抽象的东西通常土办法都比那些优雅的办法要快捷得多!”
减少全局变量
引用:
“把你踩在全局的那些乱七八糟的脚印都归于一人名下能显着降低与其他应用小工具或JS库沖突的可能性”
–DouglasCrockford
复制内容到剪贴板代码:
varname=’Jeffrey’;
varlastName=’Way’;
functiondoSomething(){}
consolelog(name);//Jeffrey
更好的写法
复制内容到剪贴板代码:
varDudeNameSpace={
name:’Jeffrey’
lastName:’Way’
doSomething:function(){}
}
consolelog(DudeNameSpacename);//Jeffrey
注意看我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的
写好注释
可能一开始你会觉得并无必要但相信我你将来会主动想要尽可能写好代码的注释的当你几个月后再回看某项目时结果却发现很难想起当时写某句东西时脑子在想的什么了是不是很让人沮丧呢?或者如果有同事要修订你的代码呢?一定一定要为你代码里的重要部分加上注释
复制内容到剪贴板代码:
//遍历数组输出各自名称
for(vari=len=arraylength;i<len;i++){
consolelog(array);
}
试试渐进增强
一定要记得为未启用JavaScript的情况提供替代方案大家可能会认为“大部分我的访客都启用了JavaScript的我才不用担心”这样的话你可就大错特错了!
你有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了?(你可以下载WebDeveloperToolBar轻松完成这项任务)禁用之后你的网站可能就彻底失去了可用性!经验之谈开发初期总是按照没有JavaScript来设计你的网站之后再进行渐进地功能增强小心翼翼地改变你地布局