JavaScript新人共同分享实用经验
本文多次用到Firebugconsol对象,1.用 ===代替 ==JavaScript里有两种不同的相等运算符:===|!==和==|!=相比之下。请参考 FirebugConsolAPI关于firebug更详细介绍,请猛击这里。
前者更值得推荐。请尽量使用前者。
===返回true!==返回fals如果两个比较对象有着同样的类型和值。
– JavaScript:TheGoodParts
如果使用==和!=操作不同数据类型时,不过。可能会遇到一些意想不到问题。进行相等判断前,JavaScript会试图将它转换为字符串、数字或 Boolean量。
2.防止使用Eval函数
并把字串作为JavaScript语句执行,Eval函数把一个字串作为参数。返回结果(参考)
而且还大大增加了平安风险,此函数不只会降低你脚本的执行效率。因为它赋予了作为文本的参数太大的权利。千万别用!
3.不要使用快速写法
可以省略掉大部分花括弧和句尾分号,技术上说。绝大多数浏览器都能正确执行以下语句:
.ifsomeVariableExist
x=false
如果是这样的呢:不过。
.ifsomeVariableExist
x=false
anotherFunctionCal;
可能会认为它和下面的语句相等:
ifsomeVariableExist{
x=false;
anotherFunctionCal;
}
倒霉的事实并非如此。现实情况是等价于:
虽然下这么做也是极度不被推荐的如您注意到再漂亮的缩进也不能代替这华丽的花括弧。所有情况下都请写清楚花括号和句尾分号。只有一行语句的时候能偶尔省略掉。
if2+2===4return'nicedone';
孩子多考虑下将来吧。
将来的开发过程中,假设。需要为这个 if语句添加更多的命令呢?时候你还不是得把括号给加上?
4.好好利用JSLint
就能快速为您扫描出任何明显的错误和问题。JSLint由 DouglaCrockford编写的一个调试器。只需要贴上你代码。
描述问题,JSLint扫描接收的代码。发现问题。并给出其在源码中的大概位置。可发现的问题包括但不限于语法错误,虽然语法错误确实是最常见的JSLint也会用约定俗成的习惯检查代码的格式化风格,以及结构错误。通过JSLint扫描并不能保证你顺序就完全正确。只是为您提供了额外一双发现错误的眼睛。
– JSLint文档
把它放到JSLint里检查一下,完成代码之前。快速消灭你无心之过。
5.页面底部加载脚本
正如下图所示:
![]()
点击放大
浏览器就没法加载页面的剩余局部。请记住—要千方百计保证客户端的页面载入速度尽可能的快。而脚本没载入完成。
为点击某链接绑定事件—那大可以等页面加载基本完成后再做。把JS文件放到页面最后,如果你JS文件只是添加一些额外功能—例如。bodi结束标签之前,这样做最好了
更好的写法是
<p>超哥是世界上最帅的人。benhuoer.com世界上最好看的博客。</p>
<scripttype="text/javascript" src="path/to/file.js"></script>
<scripttype="text/javascript" src="path/to/anotherFile.js"></script>
</body>
</html>
6.For语句外部声明变量
不要让JavaScript引擎每次都重复那些没有必要的操作。例如:当需要执行冗长的for语句时。
这样不好:
forvari=0;i<someA rray.length;i++{
varcontain=document.getElementById'container';
container.innerHtml+='mynumber:'+i;
console.logi;
}
每次都在遍历DOM寻找contain元素 太傻了这段代码每次都重新定义数组长度。
这样好多了
varcontain=document.getElementById'container';
len=someA rray.length;i<len;i++{forvari=0.
container.innerHtml+='mynumber:'+i;
console.logi;
}
要给留言改进这段代码的人额外惊喜!欢迎大家留言讨论!
7.快速构建字串
不要老惦记着一表人才的for语句,要对一个数组或对象做循环操作时。拿点创意进去嘛!明明就还有很多更快的方法:
'item2',vararr=['item1'.'item3',...];
varlist='<ul><li>'+arr.join'</li><li>'+'</li></ul>';
没那么多繁文缛节来烦你就信我一次好了或者你也可以自己试一试)这真的迄今能找到最快方法了
也别管它面前究竟发生了什么笼统的东西,通常土方法都比那些优雅的方法要快捷得多!– JamePadolsey,用点土办法。james.padolsey.com
8.减少全局变量
能显著降低与其他应用、小工具或JS库冲突的可能性。– DouglaCrockfor把你踩在全局的那些乱七八糟的脚印都归于一人名下。d
varname='Jeffrey';
varlastNam='Way';
functiondoSometh{...}
console.logname;//Jeffrei--orwindow.nam
更好的写法:
varDudeNameSpac={
name:'Jeffrey'.
lastNam:'Way'.
doSometh:function{...}
}
console.logDudeNameSpace.nam;//Jeffrey
如何戏剧化地把“乱七八糟的脚印”都归到DudeNameSpac这对象之下的注意看。
9.写好注释
但相信我将来会主动想要尽可能写好代码的注释的当你几个月后再回看某项目时,可能一开始你会觉得并无必要。结果却发现很难想起当时写某句东西时脑子在想的什么了不是很让人沮丧呢?或者,如果有同事要修订你代码呢?一定,一定要为你代码里的重要局部加上注释。
//Cyclthrougharraiandechoouteachname.
len=array.length;i<len;i++{forvari=0.
console.logarray[i];
}
10.试试渐进增强
大部分我访客都启用了JavaScript才不用担心”这样的话,一定要记得为未启用JavaScript情况提供替代方案。大家可能会认为。可就大错特错了
之后再进行渐进地功能增强,有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了可以下载 WebDevelopToolBar轻松完成这项任务。禁用之后你网站可能就彻底失去了可用性!经验之谈:开发初期总是依照没有JavaScript来设计你网站。小心翼翼地改变你地布局。
11.不要传送字串给 setInterv或 setTimeout
看看下面的代码:
setInterv
3000"document.getElementById'container'.innerHTML+='Mynewnumber:'+i".
;
而且和 eval函数有着同样的高风险。千万不要把字串传递给 setInterv和 setTimeout恰当的做法是传送一个函数名:不只执行不高效。
3000;setIntervsomeFunction.>
12.不要使用with语句
with语句似乎还挺好用的用于设置代码在特定对象中的作用域。其基本用法是提供深入到对象中处理元素的快速写法。例如:初识之下。
withbeing.person.man.bodypart{
arm=true;
leg=true;
}
等价于:
being.person.man.bodyparts.arm=true;
being.person.man.bodyparts.legs=true;
若你要为对象插入新成员,倒霉的测试标明。with表示非常糟糕,执行速度非常缓慢。替代方案是声明一个变量:
varo=being.person.man.bodyparts;
o.arm=true;
o.leg=true;
13.使用 {}而不用NewObject
如下:JavaScript有多种方式能新建对象。最传统的方法是new语句。
varo=newObject;
o.nam='Jeffrey';
o.lastNam='Way';
o.someFunct=function{
console.logthis.nam;
}
这一方法读起来却比较糟糕。强烈建议你采用下面这种在文字样式上更为强健的写法:不过。
更好的写法:
varo={
name:'Jeffrey'.
lastNam='Way'.
someFunct:function{
console.logthis.nam;
}
};
如果你想新建一个空对象,注意。用 {}就能行:
varo={};
同时又关联性强、简明直接的代码。没必要直接调用新建语句,对象字面符(Objectliter协助我写出支持很多特性。然后再费心维护声明变量和传递变量的语句之间的正确顺序,等等。– dyn-web.com
14.使用[]而不用NewArrai
新建数组时的同类型运用。
行得通的写法:
vara=newArrai;
a[0]="Joe";
a[1]='Plumber';
更好的写法:
'Plumber'];vara=['Joe'.>
该用对象时却用了数组。规则其实很简单:当属性名是小的连续整数时,JavaScript编程中经常遇到一个错误是该用数组时却用了对象。应该使用数组。其他情况,使用对象。– DouglaCrockford
15.一长列变量声明?别写那么多var用逗号吧
varsomeItem='somestring';
varanotherItem='anothstring';
varoneMoreItem='onemorestring';
更好的写法:
varsomeItem='somestring'.
anotherItem='anothstring'.
oneMoreItem='onemorestring';
但是确实让你代码干净许多。不言自明。不知道这样做能否提升代码执行速度。
17.千万千万记得写分号
大部分浏览器都允许你不写句尾分号:
varsomeItem='somestring'
functiondoSometh{
return'something'
}
这样做会造成潜在更大、更难以发现的问题:之前已经说过。
更好的写法:
varsomeItem='somestring';
functiondoSometh{
return'something';
}
18.Forin语句
可能会发现你还需要获取方法函数。所以遇到这种情况时,遍历对象时。请一定记得给你代码包一层 if语句,用以过滤信息。
forkeiinobject{
ifobject.hasOwnPropertikei{
...thendosomething...
}
}
引自 DouglaCrockford所作:JavaScript:TheGoodParts
19.使用FirebugTimer功能优化你代码
想要轻松地快速了解某项操作的用时吗?使用Firebugtimer功能来记录结果好了
functionTimeTrack{
console.tim"MyTimer";
forx=5000;x>0;x--{}
console.timeEnd"MyTimer";
}
读,读…Read,20.读。Read,Read
但吃饭和睡觉前除了看书好像也别无选择~床头柜上摆一本Web开发的好书吧!下列书单都是最爱:虽然我Web开发博客(就像这个!超级粉丝。
Object-OrientJavaScript暂无中文版)
JavaScript:TheGoodPart中文版)
但你可以看看老版本的中文版)LearnjQueri1.3暂无中文版。
LearnJavaScript中文版)
阅读他反复阅读很多次!现在都还在读。
21.自决的函数
让函数在页面载入或者某一父函数被调用时自动执行,相比于调用函数。十分简单方便的做法。只需要把你函数包在父辈之内,然后添上一个额外的括号,实质上这括号就触发了定义的函数(解更多)
functiondoSometh{
return{
name:'jeff'.
lastName:'way'
};
};
22.原生 JavaScript总是会比使用代码库来的快
能为你写代码的过程省下不少时间—尤其是当需要 AJA X操作时。不过你可得记住,诸如jQueri和Mootool这样的JavaScript库。只要你代码写得恰当,原生JavaScript总是会比利用代码库的写法执行得快一些。
但是使用原生态的for语句总归会快很多。jQuerieach方法对于循环操作十分便当。
23.CrockfordJSON.Parse
但写这篇文章之时,尽管 JavaScript2会内建JSON处置器。还是需要自己实现。DouglaCrockfordJSON创建者,已经为我创作出能直接使用的处置器了您可以在这里下载。
就能新建 JSON全局对象,导入这段代码。然后处置你.json文件。
关于JSON请检查更多介绍。
24.移去“Languag
languag还是每段script标签必备属性:很多年前。
<scripttype="text/javascript"language="javascript">
...
</script>
删掉算啦!不过现在这属性已经没啥用很久了所以。
就这些了朋友们~
看法呢?有什么快速小贴士吗?感谢你耐心阅读。就是这些了这就是给JavaScript初学者的24条小建议。各位亲爱的朋友。
varrespons=JSON.parsxhr.responseText;
varcontain=document.getElementById'container';
len=response.length;i<len;i++forvari=0.{
container.innerHTML+='<li>'+response[i].nam+':'+response[i].email+'</li>';
}
ifsomeVariableExist{
x=false;
}
anotherFunctionCal;
浙公网安备 33010602011771号