> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 초보자를 위한 24가지 실용적인 팁 [TUTS]_javascript 기술

JavaScript 초보자를 위한 24가지 실용적인 팁 [TUTS]_javascript 기술

WBOY
풀어 주다: 2016-05-16 18:51:17
원래의
930명이 탐색했습니다.

注:本文多次用到Firebug的console对象,请参考Firebug Console API 。关于firebug的更详细介绍,请猛击这里
1. 用 === 代替 ==

JavaScript里有两种不同的相等运算符:===|!== 和==|!=。相比之下,前者更值得推荐。请尽量使用前者。

引用:
“如果两个比较对象有着同样的类型和值,===返回true,!==返回false。”

– JavaScript: The Good Parts
不过,如果使用==和!=,在操作不同数据类型时, 你可能会遇到一些意想不到的问题。在进行相等判断前,JavaScript会试图将它们转换为字符串、数字或 Boolean量。

2. 避免使用Eval函数

Eval函数把一个字串作为参数,并把字串作为JavaScript语句执行,返回结果(参考)。

此函数不仅会降低你脚本的执行效率,而且还大大增加了安全风险,因为它赋予了作为文本的参数太大的权利。千万别用!

3. 不要使用快速写法

技术上说,你可以省略掉大部分花括弧和句尾分号,绝大多数浏览器都能正确执行以下语句:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists)<br>   x = false</font>
不过,如果是这样的呢:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists)<br>   x = false<br>   anotherFunctionCall();</font>
你可能会认为它和下面的语句相等:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists) {<br>   x = false;<br>   anotherFunctionCall();<br>}</font>
不幸的是,事实并非如此。现实情况是它等价于:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists) {<br>   x = false;<br>}<br>anotherFunctionCall();</font>
如您注意到的,再漂亮的缩进也不能代替这华丽的花括弧。在所有情况下都请写清楚花括号和句尾分号。在只有一行语句的时候能偶尔省略掉,虽然下这么做也是极度不被推荐的:
复制内容到剪贴板
代码:
<font face="新宋体">if(2 + 2 === 4) return 'nicely done';</font>
多考虑下将来吧,孩子

假设,在将来的开发过程中,你需要为这个 if 语句添加更多的命令呢?到时候你还不是得把括号给加上?

4. 好好利用JS Lint

JSLint 是由 Douglas Crockford 编写的一个调试器。你只需要贴上你的代码,它就能快速为您扫描出任何明显的错误和问题。
引用:
“JSLint扫描接收的代码。发现问题,描述问题,并给出其在源码中的大概位置。可发现的问题包括但不限于语法错误,虽然语法错误确实是最常见的。JSLint也会用
约定俗成的习惯检查代码的格式化风格,以及结构错误。通过JSLint的扫描并不能保证你的程序就完全正确。它只是为您提供了额外一双发现错误的眼睛。”


– JSLint 文档
完成代码之前,把它放到JSLint里检查一下,快速消灭你的无心之过。

5. 在页面底部加载脚本

正如下图所示:


请记住—— 我们要千方百计保证客户端的页面载入速度尽可能的快。而脚本没载入完成,浏览器就没法加载页面的剩余部分。

如果你的JS文件只是添加一些额外功能——例如,为点击某链接绑定事件——那大可以等页面加载基本完成后再做。把JS文件放到页面最后,body的结束标签之前,这样做最好了。

更好的写法是
复制内容到剪贴板
代码:
<font face="新宋体"><p>超哥是世界上最帅的人。benhuoer.com是世界上最好看的博客。</p><br><script type="text/javascript" src="path/to/file.js"></script><br><script type="text/javascript" src="path/to/anotherFile.js"></script><br></body><br></html> <!--0--><!--1--></font>
6. 在 For 语句外部声明变量

当需要执行冗长的for语句时,不要让JavaScript引擎每次都重复那些没有必要的操作。例如:

这样不好
复制内容到剪贴板
代码:
<font face="新宋体">for(var i = 0; i < someArray.length; i++) {<BR> var container = document.getElementById('container');<BR> container.innerHtml += 'my number: ' + i;<BR> console.log(i);<BR>}</FONT>
这段代码每次都重新定义数组长度,每次都在遍历DOM寻找container元素 —— 太傻了!

这样好多了
复制内容到剪贴板
代码:
<FONT face=新宋体>var container = document.getElementById('container');<BR>for(var i = 0, len = someArray.length; i < len; i++) {<BR> container.innerHtml += 'my number: ' + i;<BR> console.log(i);<BR>}</FONT>
我要给留言改进这段代码的人额外惊喜!欢迎大家留言讨论!

7. 快速构建字串

要对一个数组或对象做循环操作时,不要老惦记着一表人才的for语句,拿点创意出来嘛!明明就还有很多更快的办法:
复制内容到剪贴板
代码:
<FONT face=新宋体>var arr = ['item 1', 'item 2', 'item 3', ...];<BR>var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';</font>
引用:
“没那么多繁文缛节来烦你;你就信我一次好了(或者你也可以自己试一试)—— 这真的是迄今能找到的最快办法了!

用点土办法,也别管它背后究竟发生了什么抽象的东西,通常土办法都比那些优雅的办法要快捷得多!”

– James Padolsey, james.padolsey.com
8. 减少全局变量
引用:
“把你踩在全局的那些乱七八糟的脚印都归于一人名下,能显著降低与其他应用、小工具或JS库冲突的可能性。”

– Douglas Crockford
复制内容到剪贴板
代码:
<font face="新宋体">var name = 'Jeffrey';<br>var lastName = 'Way';<br>function doSomething() {...}<br>console.log(name); // Jeffrey -- or window.name</font>
更好的写法
复制内容到剪贴板
代码:
<font face="新宋体">var DudeNameSpace = {<br>   name : 'Jeffrey',<br>   lastName : 'Way',<br>   doSomething : function() {...}<br>}<br>console.log(DudeNameSpace.name); // Jeffrey</font>
注意看,我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的。

9. 写好注释

可能一开始你会觉得并无必要,但相信我,你将来会主动想要尽可能写好代码的注释的。当你几个月后再回看某项目时,结果却发现很难想起当时写某句东西时脑子在想的什么了,是不是很让人沮丧呢?或者,如果有同事要修订你的代码呢?一定,一定要为你代码里的重要部分加上注释。
复制内容到剪贴板
代码:
<font face="新宋体">// 遍历数组,输出各自名称<br>for(var i = 0, len = array.length; i < len; i++) {<BR> console.log(array);<BR>}</FONT>
10. 试试渐进增强

一定要记得为未启用JavaScript的情况提供替代方案。大家可能会认为,“大部分我的访客都启用了JavaScript的,我才不用担心”。这样的话,你可就大错特错了!

你有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了?(你可以下载 Web Developer ToolBar 轻松完成这项任务。)禁用之后你的网站可能就彻底失去了可用性!经验之谈:开发初期总是按照没有JavaScript来设计你的网站,之后再进行渐进地功能增强,小心翼翼地改变你地布局。

11. 不要传递字串给 “setInterval” 或 “setTimeout”

看看下面的代码:
复制内容到剪贴板
代码:
<FONT face=新宋体>setInterval(<BR>"document.getElementById('container').innerHTML += 'My new number: ' + i", 3000<BR>);</FONT>
不仅执行不高效,而且和 eval 函数有着同样的高风险。千万不要把字串传递给 setInterval 和 setTimeout。恰当的做法是,传递一个函数名:
复制内容到剪贴板
代码:
<FONT face=新宋体>setInterval(someFunction, 3000);</FONT>
12. 不要使用with语句

初识之下,“with”语句似乎还挺好用的。它用于设置代码在特定对象中的作用域。其基本用法是提供深入到对象中处理元素的快速写法。例如:
复制内容到剪贴板
代码:
<FONT face=新宋体>with (being.person.man.bodyparts) {<BR> arms = true;<BR> legs = true;<BR>}</FONT>
– 等价于 —
复制内容到剪贴板
代码:
<FONT face=新宋体>being.person.man.bodyparts.arms = true;<BR>being.person.man.bodyparts.legs= true;</FONT>
不幸的是,测试表明,若你要为对象插入新成员,with的表现非常糟糕,它的执行速度非常缓慢。替代方案是声明一个变量:
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = being.person.man.bodyparts;<BR>o.arms = true;<BR>o.legs = true;</FONT>
13. 使用 {},而不用New Object()

在JavaScript有多种方式能新建对象。最传统的方法是 new 语句,如下:
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = new Object();<BR>o.name = 'Benhuoer';<BR>o.lastName = 'Yang';<BR>o.someFunction = function() {<BR> console.log(this.name);<BR>}</FONT>
不过,这一方法读起来却比较糟糕。我强烈建议你采用下面这种在文字样式上更为强健的写法:

更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = {<BR> name: 'Jeffrey',<BR> lastName = 'Way',<BR> someFunction : function() {<BR> console.log(this.name);<BR> }<BR>};</FONT>
注意,如果你想新建一个空对象,用 {} 就能行:
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = {};</FONT>
引用:
“对象字面符(Objects literals)帮助我们写出支持很多特性,同时又关联性强、简明直接的代码。没必要直接调用新建语句,然后再费心维护声明变量和传递变量的语句之间的正确顺序,等等。” – dyn-web.com
14. 使用[],而不用New Array()

新建数组时的同类型运用。

行得通的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var a = new Array();<BR>a[0] = "Joe";<BR>a[1] = 'Plumber';</FONT>
更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var a = ['Joe','Plumber'];</FONT>
引用:
“在JavaScript编程中经常遇到的一个错误是,该用数组时却用了对象,该用对象时却用了数组。规则其实很简单:当属性名是小的连续整数时,你应该使用数组。其他情况,使用对象。” – Douglas Crockford
15. 一长列变量声明?别写那么多var,用逗号吧
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string';<BR>var anotherItem = 'another string';<BR>var oneMoreItem = 'one more string';</FONT>
更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string',<BR> anotherItem = 'another string',<BR> oneMoreItem = 'one more string';</FONT>
…不言自明。我不知道这样做能否提升代码执行速度,但是确实让你的代码干净许多。

17. 千万千万记得写分号

大部分浏览器都允许你不写句尾分号:
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string'<BR>function doSomething() {<BR> return 'something'<BR>}</FONT>
之前已经说过,这样做会造成潜在的更大、更难以发现的问题:

更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string';<BR>function doSomething() {<BR> return 'something';<BR>}</FONT>
18. “For in” 语句

遍历对象时,你可能会发现你还需要获取方法函数。所以遇到这种情况时,请一定记得给你的代码包一层 if 语句,用以过滤信息。
复制内容到剪贴板
代码:
<FONT face=新宋体>for(key in object) {<BR> if(object.hasOwnProperty(key) {<BR> ...then do something...<BR> }<BR>}</FONT>
引自[/i][i] Douglas Crockford 所作:[/i][i] JavaScript: The Good Parts

19. 使用Firebug的“Timer”功能优化你的代码

想要轻松地快速了解某项操作的用时吗?使用Firebug的timer功能来记录结果好了。
复制内容到剪贴板
代码:
<FONT face=新宋体>function TimeTracker(){<BR>console.time("MyTimer");<BR>for(x=5000; x > 0; x--){}<br>console.timeEnd("MyTimer");<br>}</font>
20. 읽고, 읽고, 읽고… 읽고, 읽고…

저는 웹 개발 블로그의 열렬한 팬입니다. 밥먹고 자기전에 을 읽는 수밖에 없는 것 같아요~ 침대 옆 탁자 위에 웹 개발에 관한 좋은 책을 올려두세요! 다음 도서 목록은 제가 가장 좋아하는 도서 목록입니다.



읽기 …여러 번 읽어보세요! 지금도 계속 읽고 있어요.

21. 자체 결정 기능

함수 호출에 비해 페이지 로드 시 자동으로 함수가 로드되거나 상위 함수가 호출되도록 함 호출되는 매우 간단하고 편리한 실행 방법입니다. 함수를 상위 항목으로 묶고 추가 괄호를 추가하면 기본적으로 정의한 함수가 실행됩니다(자세히 알아보기).
클립보드에 콘텐츠 복사
코드:
<font>(function doSomething() {<code id="code28"><font face="新宋体">(function doSomething() {<br>   return {<br>      name: 'jeff',<br>      lastName: 'way'<br>   };<br>})();</font> return {
name: 'jeff', lastName: 'way' };})();


22. 기본 JavaScript는 코드 라이브러리를 사용하는 것보다 항상 빠릅니다


jQuery 및 Mootools와 같은 JavaScript 라이브러리를 사용하면 코드 작성 과정에서 특히 AJAX 작업이 필요한 경우 많은 시간을 절약할 수 있습니다. 그러나 코드가 올바르게 작성된다면 기본 JavaScript는 항상 코드 라이브러리를 사용하는 것보다 더 빠르게 실행된다는 점을 기억해야 합니다. jQuery의 "each" 메서드는 루프 작업에 매우 편리하지만 원래 for 문을 사용하는 것이 항상 훨씬 더 빠릅니다.

23. Crockford의 JSON.Parse
JavaScript 2에는 JSON 프로세서가 내장되어 있지만 이 글을 쓰는 시점에는 우리는 여전히 그것을 직접 구현해야 합니다. JSON의 창시자인 Douglas Crockford는 우리가 즉시 사용할 수 있는 핸들러를 만들었습니다. 여기
에서 다운로드할 수 있습니다.
이 코드를 가져오면 새로운 JSON 전역 개체를 생성한 다음 .json 파일을 처리할 수 있습니다. <font face="新宋体">var response = JSON.parse(xhr.responseText); <br>var container = document.getElementById('container');<br>for(var i = 0, len = response.length; i < len; i ) {<br>container.innerHTML = '<li>' response.name ' : ' response.email '</li>';<br>}</font>
클립보드에 콘텐츠 복사 코드:<font face="new宋体">var response = JSON.parse(xhr.responseText); </font>var 컨테이너 = document.getElementById('container');
for(var i = 0, len = response.length; i < len; i ) {
container.innerHTML = '
  • ' response.name ' : ' response.email '
  • ';}JSON의 경우
    자세한 소개
    를 참조하세요.
    24. "언어" 제거 <font face="新宋体"><script type="text/javascript" language="javascript"><br>...<br></script></font>


    수년 전만 해도 언어는 여전히 모든 스크립트 태그의 필수 속성이었습니다. 클립보드에 콘텐츠 복사 코드:
    <font face="新宋体"><script type="text/javascript" 언어="javascript"><br>...</ script></font>그런데 이 속성은 오랫동안 쓸모가 없었으니... 그러니 삭제하세요! 그렇습니다 친구들~그렇습니다. JavaScript 초보자를 위한 24가지 팁입니다. 사랑하는 친구 여러분, 어떻게 생각하시나요? 빠른 팁이 있나요? 읽어주셔서 감사합니다.
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿