JavaScript最好实践20则

本文总结了20则JavaScript的最好实践,愿望对列位爪哇国编剧有效。(顺带倾销下CoffeeScript)

《JavaScript最好实践20则》

1. 运用 ===

JavaScript有两种等值运算符,分别是=====,以及!==!=。比较两个值的时刻,请运用前者,防止JavaScript憎恶的强迫范例转换带来预感以外的结果。

CoffeeScript下只提供无强迫范例转换的==(别号is)和!=(别号isnt),没必要头疼选哪一种。

2. eval很罪恶

eval让我们将字符串作为参数实行,这是异常壮大的特征。然则,eval会大幅下降剧本的机能,也会引起安全题目。除非你盘算用JavaScript写一个编译器,照样对eval敬而远之的好。

3. 少打字多费脑

免却一些花括号,大多数浏览器依然能明白,比方:

if(someVariableExists)  
   x = false

然则,庞杂一点的代码就可能带来题目:

if(someVariableExists)  
   x = false  
   anotherFunctionCall();

你想表达的也许是:

if(someVariableExists) {  
   x = false;  
   anotherFunctionCall();  
}

然则实际上等价于:

if(someVariableExists) {  
   x = false;  
}  
anotherFunctionCall();

所以,照样乖乖地写花括号吧,这能为你省去无数贫苦。

假如你真那末憎恶花括号,照样投入CoffeeScript的度量吧:

if someVariable?
  x = false

if someVariable?
  x = false
  anotherFunctionCall()

同理,大多数浏览器许可你省略分号:

var someItem = 'some string'  
function doSomething() {  
  return 'something'  
}

这和省略花括号一样蹩脚,照样忠实一点好:

var someItem = 'some string';  
function doSomething() {  
  return 'something';  
}

或许,投靠CoffeeScript吧,没必要分号了:

someItem = 'some string'
doSomething = -> 'something'

函数的写法是否是也很帅?直接定义一个匿名函数,然后把它赋给一个变量即可。

4. 运用JSLint

JSLint是一款异常棒的调试器,它会敏捷找出代码中的题目,包含语法错误、编码作风和程序结构题目。

5. 将剧本放在页面的底部

剧本加载是壅塞的,剧本加载并实行完以后,浏览器不能继承衬着下面的内容。因而,用户被迫守候更长时候。假如你的JavaScript剧本只是用来加强结果,那末请将它放在页面的末了:

<p>And now you know my favorite kinds of corn. </p>  
<script type="text/javascript" src="path/to/file.js"></script>  
<script type="text/javascript" src="path/to/anotherFile.js"></script>  
</body>  
</html>

6. 防止在for语句中声明变量

蹩脚的例子:

for(var i = 0; i < someArray.length; i++) {  
   var container = document.getElementById('container');  
   container.innerHtml += 'my number: ' + i;  
   console.log(i);  
}

每次轮回都要盘算数组的长度,每次都要遍历DOM查询“container”元素,效力低下!

改成如许就好一些:

var container = document.getElementById('container');  
for(var i = 0, len = someArray.length; i < len;  i++) {  
   container.innerHtml += 'my number: ' + i;  
   console.log(i);  
}

7. 构建字符串的最优要领

遍历数组或对象的时刻不一定要用for,运用原生函数往往是更好的挑选:

var arr = ['item 1', 'item 2', 'item 3', ...];  
var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';

8. 削减全局变量

防止模块和类库相互滋扰。

var name = 'Jeffrey';  
var lastName = 'Way';  

function doSomething() {...}  

console.log(name);

更好:

var DudeNameSpace = {  
   name : 'Jeffrey',  
   lastName : 'Way',  
   doSomething : function() {...}  
}  
console.log(DudeNameSpace.name)

CoffeeScipt下变量默许非全局,不须要加var,而且编译的时刻,全部.coffee文件处于一个函数当中,也就是说,一个自力的定名空间。运用CoffeeScript,没必要再费心全局变量题目。

9. 解释

优越的解释,协助他人或许几个月以后的你明白你的代码。

10. 渐进加强

“大多数访问者启用了JavaScript,没必要忧郁”这是很大的误区。

消费一点时候查看下你美丽的页面在javascript被封闭时是什么样的吧。设想网站时,起首假定 JavaScript 是被禁用的,在此基础上,渐进加强网站。

11. 不要给setIntervalsetTimeout通报字符串参数

setInterval(  
"document.getElementById('container').innerHTML += 'My new number: ' + i", 3000  
);

上面的代码和eval千篇一律,效力低下。我们应当通报函数:

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()

new加组织函数能够建立对象:

var o = new Object();  
o.name = 'Jeffrey';  
o.lastName = 'Way';  
o.someFunction = function() {  
   console.log(this.name);  
}

这类要领多受诟病,更好的做法是:

var o = {  
   name: 'Jeffrey',  
   lastName = 'Way',  
   someFunction : function() {  
      console.log(this.name);  
   }  
};

如许我们就不须要直接挪用组织函数,也不须要为通报给函数的参数的准确递次而心惊肉跳。

14. 运用[]替代new Array()

建立数组也是一样的原理。

var a = new Array();  
a[0] = "Joe";  
a[1] = 'Plumber';

不如

var a = ['Joe','Plumber'];

15. 定义多个变量时,运用逗号

var someItem = 'some string';  
var anotherItem = 'another string';  
var oneMoreItem = 'one more string';

不如如许:

var someItem = 'some string',  
    anotherItem = 'another string',  
    oneMoreItem = 'one more string';

如许代码更清晰。

CoffeeScript?正如我们前面提到的,变量默许非全局,所以我们基础不须要var

16. for in

遍历对象的属性的时刻,还会遍历要领函数,真糟蹋。加上一个if语句过滤下:

for(key in object) {  
   if(object.hasOwnProperty(key) {  
      ...then do something...  
   }  
}

17. 运用Firebug timer 作机能剖析

Firebug timer 能够简朴地肯定操纵斲丧的时候:

function TimeTracker(){  
 console.time("MyTimer");  
 for(x=5000; x > 0; x--){}  
 console.timeEnd("MyTimer");  
}

18. 浏览,浏览,照样浏览

午饭之余或上床睡觉之前,读点书吧。床头常发一本web开辟方面的书。我喜好读的一些书包含:

读下吧。多读几遍。我常读。

19. 自实行函数

用括号包裹函数定义,然后运用函数:

(function doSomething() {  
   return {  
      name: 'jeff',  
      lastName: 'way'  
   };  
})();

CoffeeScript版本更简约:

(-> { name: 'jeff', lastName: 'way' })()

do的话更清晰:

do -> { name: 'jeff', lastName: 'way' }

20. 原生代码总能比运用库更快

jQuery和Mootools能够勤俭你大批的开辟时候——特别是处置惩罚AJAX。然则别忘了,运用库永久不会比原生代码快(假定你编码准确)。

本文为24 JavaScript Best Practices for Beginners的衍生作品,在其基础上进行了合并调解,并加入了 CoffeeScript 的内容。

    原文作者:weakish
    原文地址: https://segmentfault.com/a/1190000000359375
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞