亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript最佳實(shí)踐20則

fuchenxuan / 3341人閱讀

摘要:本文總結(jié)了則的最佳實(shí)踐,希望對(duì)各位爪哇國(guó)編劇有用。使用有兩種等值運(yùn)算符,分別是和,以及和。比較兩個(gè)值的時(shí)候,請(qǐng)使用前者,避免討厭的強(qiáng)制類型轉(zhuǎn)換帶來(lái)預(yù)料之外的結(jié)果。下只提供無(wú)強(qiáng)制類型轉(zhuǎn)換的別名和別名,不用頭疼選哪種。

本文總結(jié)了20則JavaScript的最佳實(shí)踐,希望對(duì)各位爪哇國(guó)編劇有用。(順帶推銷下CoffeeScript)

。

1. 使用 ===

JavaScript有兩種等值運(yùn)算符,分別是=====,以及!==!=。比較兩個(gè)值的時(shí)候,請(qǐng)使用前者,避免JavaScript討厭的強(qiáng)制類型轉(zhuǎn)換帶來(lái)預(yù)料之外的結(jié)果。

CoffeeScript下只提供無(wú)強(qiáng)制類型轉(zhuǎn)換的==(別名is)和!=(別名isnt),不用頭疼選哪種。

2. eval很邪惡

eval讓我們將字符串作為參數(shù)執(zhí)行,這是非常強(qiáng)大的特性。然而,eval會(huì)大幅降低腳本的性能,也會(huì)引起安全問(wèn)題。除非你打算用JavaScript寫一個(gè)編譯器,還是對(duì)eval敬而遠(yuǎn)之的好。

3. 少打字多費(fèi)腦

省掉一些花括號(hào),大多數(shù)瀏覽器仍然能理解,例如:

if(someVariableExists)  
   x = false

然而,復(fù)雜一點(diǎn)的代碼就可能帶來(lái)問(wèn)題:

if(someVariableExists)  
   x = false  
   anotherFunctionCall();

你想表達(dá)的也許是:

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

然而實(shí)際上等價(jià)于:

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

所以,還是乖乖地寫花括號(hào)吧,這能為你省去無(wú)數(shù)麻煩。

如果你真那么討厭花括號(hào),還是投入CoffeeScript的懷抱吧:

if someVariable?
  x = false

if someVariable?
  x = false
  anotherFunctionCall()

同理,大多數(shù)瀏覽器允許你省略分號(hào):

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

這和省略花括號(hào)一樣糟糕,還是老實(shí)一點(diǎn)好:

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

或者,投奔CoffeeScript吧,不用分號(hào)了:

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

函數(shù)的寫法是不是也很帥?直接定義一個(gè)匿名函數(shù),然后把它賦給一個(gè)變量即可。

4. 使用JSLint

JSLint是一款非常棒的調(diào)試器,它會(huì)迅速找出代碼中的問(wèn)題,包括語(yǔ)法錯(cuò)誤、編碼風(fēng)格和程序結(jié)構(gòu)問(wèn)題。

5. 將腳本放在頁(yè)面的底部

腳本加載是阻塞的,腳本加載并執(zhí)行完之后,瀏覽器不能繼續(xù)渲染下面的內(nèi)容。因此,用戶被迫等待更長(zhǎng)時(shí)間。如果你的JavaScript腳本只是用來(lái)增強(qiáng)效果,那么請(qǐng)將它放在頁(yè)面的最后:

And now you know my favorite kinds of corn.

6. 避免在for語(yǔ)句中聲明變量

糟糕的例子:

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

每次循環(huán)都要計(jì)算數(shù)組的長(zhǎng)度,每次都要遍歷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. 構(gòu)建字符串的最優(yōu)方法

遍歷數(shù)組或?qū)ο蟮臅r(shí)候不一定要用for,使用原生函數(shù)往往是更好的選擇:

var arr = ["item 1", "item 2", "item 3", ...];  
var list = "
  • " + arr.join("
  • ") + "
";
8. 減少全局變量

避免模塊和類庫(kù)互相干擾。

var name = "Jeffrey";  
var lastName = "Way";  

function doSomething() {...}  

console.log(name);

更好:

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

CoffeeScipt下變量默認(rèn)非全局,不需要加var,而且編譯的時(shí)候,整個(gè).coffee文件處于一個(gè)函數(shù)之中,也就是說(shuō),一個(gè)獨(dú)立的命名空間。使用CoffeeScript,不用再操心全局變量問(wèn)題。

9. 注釋

良好的注釋,幫助別人或者幾個(gè)月之后的你理解你的代碼。

10. 漸進(jìn)增強(qiáng)

“大多數(shù)訪問(wèn)者啟用了JavaScript,不必?fù)?dān)心”這是很大的誤區(qū)。

花費(fèi)一點(diǎn)時(shí)間查看下你漂亮的頁(yè)面在javascript被關(guān)閉時(shí)是什么樣的吧。設(shè)計(jì)網(wǎng)站時(shí),首先假定 JavaScript 是被禁用的,在此基礎(chǔ)上,漸進(jìn)增強(qiáng)網(wǎng)站。

11. 不要給setIntervalsetTimeout傳遞字符串參數(shù)
setInterval(  
"document.getElementById("container").innerHTML += "My new number: " + i", 3000  
);

上面的代碼和eval如出一轍,效率低下。我們應(yīng)該傳遞函數(shù):

setInterval(someFunction, 3000);
12. 別用with

看起來(lái),使用with語(yǔ)句的代碼很清晰,例如:

with (being.person.man.bodyparts) {  
   arms = true;  
   legs = true;  
}

這比下面的要清爽得多:

being.person.man.bodyparts.arms = true;  
being.person.man.bodyparts.legs= true;

很不幸,使用with語(yǔ)句導(dǎo)致添加新成員時(shí)性能低下,我們還是用變量吧:

var o = being.person.man.bodyparts;  
o.arms = true;  
o.legs = true;
13. 使用{}代替new Object()

new加構(gòu)造函數(shù)可以創(chuàng)建對(duì)象:

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);  
   }  
};

這樣我們就不需要直接調(diào)用構(gòu)造函數(shù),也不需要為傳遞給函數(shù)的參數(shù)的正確順序而提心吊膽。

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

創(chuàng)建數(shù)組也是一樣的道理。

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

不如

var a = ["Joe","Plumber"];
15. 定義多個(gè)變量時(shí),使用逗號(hào)
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?正如我們前面提到的,變量默認(rèn)非全局,所以我們根本不需要var。

16. for in

遍歷對(duì)象的屬性的時(shí)候,還會(huì)遍歷方法函數(shù),真浪費(fèi)。加上一個(gè)if語(yǔ)句過(guò)濾下:

for(key in object) {  
   if(object.hasOwnProperty(key) {  
      ...then do something...  
   }  
}
17. 使用Firebug timer 作性能分析

Firebug timer 可以簡(jiǎn)單地確定操作消耗的時(shí)間:

function TimeTracker(){  
 console.time("MyTimer");  
 for(x=5000; x > 0; x--){}  
 console.timeEnd("MyTimer");  
}
18. 閱讀,閱讀,還是閱讀

午餐之余或上床睡覺(jué)之前,讀點(diǎn)書吧。床頭常發(fā)一本web開發(fā)方面的書。我喜歡讀的一些書包括:

Object-Oriented JavaScript

JavaScript: The Good Parts

Learning jQuery 1.3

Learning JavaScript

讀下吧。多讀幾遍。我常讀。

19. 自執(zhí)行函數(shù)

用括號(hào)包裹函數(shù)定義,然后應(yīng)用函數(shù):

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

CoffeeScript版本更簡(jiǎn)潔:

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

do的話更清楚:

do -> { name: "jeff", lastName: "way" }
20. 原生代碼總能比使用庫(kù)更快

jQuery和Mootools可以節(jié)約你大量的開發(fā)時(shí)間——特別是處理AJAX。但是別忘了,使用庫(kù)永遠(yuǎn)不會(huì)比原生代碼快(假定你編碼正確)。


本文為24 JavaScript Best Practices for Beginners的衍生作品,在其基礎(chǔ)上進(jìn)行了歸并調(diào)整,并加入了 CoffeeScript 的內(nèi)容。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77988.html

相關(guān)文章

  • 前端學(xué)習(xí)資源

    摘要:掘金日?qǐng)?bào)第四期使用怎么能不知道這些插件合集掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分前端后端產(chǎn)品設(shè)計(jì)工具資源和一些有趣的東西。目前已經(jīng)涵蓋了的相關(guān)資源鏈接,供大家參考與學(xué)習(xí)。 【掘金日?qǐng)?bào)】第四期 使用Sublime?怎么能不知道這些 Sublime 插件合集! 掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分:前端、后端、Android、iOS、產(chǎn)品設(shè)計(jì)、工具資源和一些有趣的東西。 前端...

    xzavier 評(píng)論0 收藏0
  • 前端學(xué)習(xí)資源

    摘要:掘金日?qǐng)?bào)第四期使用怎么能不知道這些插件合集掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分前端后端產(chǎn)品設(shè)計(jì)工具資源和一些有趣的東西。目前已經(jīng)涵蓋了的相關(guān)資源鏈接,供大家參考與學(xué)習(xí)。 【掘金日?qǐng)?bào)】第四期 使用Sublime?怎么能不知道這些 Sublime 插件合集! 掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分:前端、后端、Android、iOS、產(chǎn)品設(shè)計(jì)、工具資源和一些有趣的東西。 前端...

    weij 評(píng)論0 收藏0
  • Webpack 最佳實(shí)踐總結(jié)(一)

    摘要:它會(huì)代替所有的實(shí)例的值為,從而使知道那些判斷表達(dá)式總是錯(cuò)誤的,從而刪除相關(guān)代碼,進(jìn)一步壓縮打包文件模塊機(jī)制項(xiàng)目中使用的,通過(guò)也能通過(guò)打包有用的代碼,進(jìn)一步減少大小。 好久沒(méi)寫文章,這次預(yù)計(jì)會(huì)帶來(lái)3篇的 Webpack 系列文章,將會(huì)在這幾天內(nèi)更新完。 Webpack3 自今年6月20日正式發(fā)布而來(lái),給我們帶來(lái)Scope Hoisting和Magic Comments兩大功能,可惜不在這...

    jubincn 評(píng)論0 收藏0
  • [ 好文分享 ] jQuery最佳實(shí)踐

    摘要:所以,最佳選擇是。事實(shí)上,這種處理完全不必要。這樣的設(shè)計(jì),使得讀取局部變量比讀取全局變量快得多。請(qǐng)看下面兩段代碼,第一段代碼是讀取全局變量第二段代碼是讀取局部變量第二段代碼讀取變量的時(shí)候,不用前往上一層作用域,所以要比第一段代碼快五六倍。 轉(zhuǎn)自:http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html ...

    mzlogin 評(píng)論0 收藏0
  • jQuery最佳實(shí)踐

    摘要:所以,最佳選擇是。事實(shí)上,這種處理完全不必要。這樣的設(shè)計(jì),使得讀取局部變量比讀取全局變量快得多。請(qǐng)看下面兩段代碼,第一段代碼是讀取全局變量第二段代碼是讀取局部變量第二段代碼讀取變量的時(shí)候,不用前往上一層作用域,所以要比第一段代碼快五六倍。 轉(zhuǎn)自:阮一峰 日期: 2011年8月 4日http://www.ruanyifeng.com/blo... 上周,我整理了《jQuery設(shè)計(jì)思想》。...

    senntyou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<