日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

給JavaScript初學者的23條最佳實踐

瀏覽:30日期:2023-11-24 08:36:36
1.使用 === 代替 ==

JavaScript 使用2種不同的等值運算符:===|!== 和 ==|!=,在比較操作中使用前者是最佳實踐。

“如果兩邊的操作數具有相同的類型和值,===返回true,!==返回false。”——《JavaScript:語言精粹》

然而,當使用==和!=時,你可能會遇到類型不同的情況,這種情況下,操作數的類型會被強制轉換成一樣的再做比較,這可能不是你想要的結果。

2.Eval=邪惡

起初不太熟悉時,“eval”讓我們能夠訪問JavaScript的編譯器(譯注:這看起來很強大)。從本質上講,我們可以將字符串傳遞給eval作為參數,而執行它。

這不僅大幅降低腳本的性能(譯注:JIT編譯器無法預知字符串內容,而無法預編譯和優化),而且這也會帶來巨大的安全風險,因為這樣付給要執行的文本太高的權限,避而遠之。

3.省略未必省事

從技術上講,你可以省略大多數花括號和分號。大多數瀏覽器都能正確理解下面的代碼:

if(someVariableExists) x = false

然后,如果像下面這樣:

if(someVariableExists) x = false anotherFunctionCall();

有人可能會認為上面的代碼等價于下面這樣:

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

不幸的是,這種理解是錯誤的。實際上的意思如下:

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

你可能注意到了,上面的縮進容易給人花括號的假象。無可非議,這是一種可怕的實踐,應不惜一切代價避免。僅有一種情況下,即只有一行的時候,花括號是可以省略的,但這點是飽受爭議的。

if(2 + 2 === 4) return ’nicely done’;

未雨綢繆

很可能,有一天你需要在if語句塊中添加更多的語句。這樣的話,你必須重寫這段代碼。底線——省略是雷區。

4.使用JSLint

JSLint是由大名鼎鼎的道格拉斯(Douglas Crockford)編寫的調試器。簡單的將你的代碼粘貼進JSLint中,它會迅速找出代碼中明顯的問題和錯誤。

“JSLint掃面輸入的源代碼。如果發現一個問題,它返回一條描述問題和一個代碼中的所在位置的消息。問題并不一定是語法錯誤,盡管通常是這樣。JSLint還會查看一些編碼風格和程序結構問題。這并不能保證你的程序是正確的。它只是提供了另一雙幫助發現問題的眼睛。”——JSLing 文檔

部署腳本之前,運行JSLint,只是為了確保你沒有做出任何愚蠢的錯誤。

5.將腳本放在頁面的底部

在本系列前面的文章里已經提到過這個技巧,我粘貼信息在這里。

給JavaScript初學者的23條最佳實踐

記住——首要目標是讓頁面盡可能快的呈獻給用戶,腳本的加載是阻塞的,腳本加載并執行完之前,瀏覽器不能繼續渲染下面的內容。因此,用戶將被迫等待更長時間。

如果你的js只是用來增強效果——例如,按鈕的單擊事件——馬上將腳本放在body結束之前。這絕對是最佳實踐。

建議

<p>And now you know my favorite kinds of corn. </p> <script type='text/javascript' src='http://www.b3g6.com/bcjs/path/to/file.js'></script> <script type='text/javascript' src='http://www.b3g6.com/bcjs/path/to/anotherFile.js'></script> </body> </html>6.避免在For語句內聲明變量

當執行冗長的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>’;

我不是你心中的神,但請你相信我(不信你自己測試)——這是迄今為止最快的方法!使用原生代碼(如 join()),不管系統內部做了什么,通常比非原生快很多。——James Padolsey, james.padolsey.com

8.減少全局變量

只要把多個全局變量都整理在一個名稱空間下,擬將顯著降低與其他應用程序、組件或類庫之間產生糟糕的相互影響的可能性。——Douglas Crockford

var name = ’Jeffrey’; var lastName = ’Way’; function doSomething() {...} console.log(name); // Jeffrey -- 或 window.name

更好的做法

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

注:這里只是簡單命名為 “DudeNameSpace”,實際當中要取更合理的名字。

9.給代碼添加注釋

似乎沒有必要,當請相信我,盡量給你的代碼添加更合理的注釋。當幾個月后,重看你的項目,你可能記不清當初你的思路。或者,假如你的一位同事需要修改你的代碼呢?總而言之,給代碼添加注釋是重要的部分。

// 循環數組,輸出每項名字(譯者注:這樣的注釋似乎有點多余吧). for(var i = 0, len = array.length; i < len; i++) { console.log(array[i]); }10.擁抱漸進增強

確保javascript被禁用的情況下能平穩退化。我們總是被這樣的想法吸引,“大多數我的訪客已經啟用JavaScript,所以我不必擔心。”然而,這是個很大的誤區。

你可曾花費片刻查看下你漂亮的頁面在javascript被關閉時是什么樣的嗎?(下載Web Developer工具就能很容易做到(譯者注:chrome用戶在應用商店里自行下載,ie用戶在Internet選項中設置)),這有可能讓你的網站支離破碎。作為一個經驗法則,設計你的網站時假設JavaScript是被禁用的,然后,在此基礎上,逐步增強你的網站。

11.不要給”setInterval”或”setTimeout”傳遞字符串參數

考慮下面的代碼:

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

不僅效率低下,而且這種做法和”eval”如出一轍。從不給setInterval和setTimeout傳遞字符串作為參數,而是像下面這樣傳遞函數名。

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;

不幸的是,經過測試后,發現這時“設置新成員時表現得非常糟糕。作為代替,您應該使用變量,像下面這樣。

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

在JavaScript中創建對象的方法有多種。可能是傳統的方法是使用”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); } };

注意,果你只是想創建一個空對象,{}更好。

var o = {};

“對象字面量使我們能夠編寫更具特色的代碼,而且相對簡單的多。不需要直接調用構造函數或維持傳遞給函數的參數的正確順序,等”——dyn-web.com

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

這同樣適用于創建一個新的數組。

例如:

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

更好的做法:

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

“javascript程序中常見的錯誤是在需要對象的時候使用數組,而需要數組的時候卻使用對象。規則很簡單:當屬性名是連續的整數時,你應該使用數組。否則,請使用對象”——Douglas Crockford

15.定義多個變量時,省略var關鍵字,用逗號代替

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

更好的做法

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

…應而不言自明。我懷疑這里真的有所提速,但它能是你的代碼更清晰。

16.謹記,不要省略分號

從技術上講,大多數瀏覽器允許你省略分號。

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

已經說過,這是一個非常糟糕的做法可能會導致更大的,難以發現的問題。

更好的做法

var someItem = ’some string’; function doSomething() { return ’something’; }17.”For in”語句

當遍歷對象的屬性時,你可能會發現還會檢索方法函數。為了解決這個問題,總在你的代碼里包裹在一個if語句來過濾信息。

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

參考 JavaScript:語言精粹,道格拉斯(Douglas Crockford)。

18.使用Firebug的”timer”功能優化你的代碼

在尋找一個快速、簡單的方法來確定操作需要多長時間嗎?使用Firebug的“timer”功能來記錄結果。

function TimeTracker(){ console.time('MyTimer'); for(x=5000; x > 0; x--){} console.timeEnd('MyTimer'); }19.閱讀,閱讀,反復閱讀

雖然我是一個巨大的web開發博客的粉絲(像這樣!),午餐之余或上床睡覺之前,實在沒有什么比一本書更合適了,堅持放一本web開發方面書在你的床頭柜。下面是一些我最喜愛的JavaScript書籍。

《Object-Oriented JavaScript| JavaScript面向對象編程指南》《JavaScript:The Good Parts|JavaScript語言精粹修訂版》《Learning jQuery 1.3|jQuery基礎教程 第4版》《Learning JavaScript|JavaScript學習指南》

讀了他們……多次。我仍將繼續!

20.自執行函數

和調用一個函數類似,它很簡單的使一個函數在頁面加載或父函數被調用時自動運行。簡單的將你的函數用圓括號包裹起來,然后添加一個額外的設置,這本質上就是調用函數。

(function doSomething() { return { name: ’jeff’, lastName: ’way’ }; })();21.原生代碼永遠比庫快

JavaScript庫,例如jQuery和Mootools等可以節省大量的編碼時間,特別是AJAX操作。已經說過,總是記住,庫永遠不可能比原生JavaScript代碼更快(假設你的代碼正確)。

jQuery的“each”方法是偉大的循環,但使用原生”for”語句總是更快。

22.道格拉斯的 JSON.Parse

盡管JavaScript 2(ES5)已經內置了JSON 解析器。但在撰寫本文時,我們仍然需要自己實現(兼容性)。道格拉斯(Douglas Crockford),JSON之父,已經創建了一個你可以直接使用的解析器。這里可以下載(鏈接已壞,可以在這里查看相關信息http://www.json.org/)。

只需簡單導入腳本,您將獲得一個新的全局JSON對象,然后可以用來解析您的json文件。

var response = JSON.parse(xhr.responseText); var container = document.getElementById(’container’); for(var i = 0, len = response.length; i < len; i++) { container.innerHTML += ’<li>’ + response[i].name + ’ : ’ + response[i].email + ’</li>’; }23.移除”language”屬性

曾經腳本標簽中的“language”屬性非常常見。

<script type='text/javascript' language='javascript'> ... </script>

然而,這個屬性早已被棄用,所以請移除(譯者注:html5 中已廢棄,但如果你喜歡,你仍然可以添加)。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品亚洲专区在线观看| 久久蜜桃精品| 日韩在线二区| 一区二区三区四区在线观看国产日韩| 日本中文字幕不卡| 国产一区二区三区不卡视频网站 | 亚洲一区二区三区在线免费| 日本一区二区三区中文字幕| 日韩av在线播放网址| 国产精品久久久久久久久免费高清| 久久免费高清| 欧美专区一区二区三区| 99热精品久久| 婷婷亚洲成人| 国产videos久久| 不卡在线一区二区| 午夜在线视频观看日韩17c| 免费精品视频| 麻豆国产欧美日韩综合精品二区| 中文字幕在线视频久| 视频在线在亚洲| 精品久久国产一区| 午夜久久一区| 日韩一区免费| 伊人久久国产| 综合亚洲色图| 欧美精品资源| 国产精品一区二区三区av麻| 97精品一区| 综合视频一区| 国产日韩三级| 成人在线网站| 蜜桃一区二区三区在线| 欧美在线黄色| 精品久久免费| 亚洲精品欧美| 国产日韩电影| 日韩国产精品久久久| 国产91精品对白在线播放| 亚洲免费精品| 精品国产免费人成网站| 日韩中文字幕91| 日韩av不卡一区二区| 韩国一区二区三区视频| 欧洲激情综合| 国产亚洲一区| 欧美国产日韩电影| 天堂√中文最新版在线| 亚洲人妖在线| 欧美黄色一区| 米奇777超碰欧美日韩亚洲| 99久久婷婷| 国产精品一区二区中文字幕| 亚洲午夜天堂| 免费黄色成人| 国产精品毛片久久久| 在线亚洲欧美| 精品美女视频 | 欧美精品aa| 日韩va欧美va亚洲va久久| 激情综合五月| 欧美日本久久| 欧美成人久久| 麻豆精品蜜桃视频网站| 亚洲一二三区视频| 国产激情综合| 亚洲精品在线国产| 欧美www视频在线观看| 蜜桃视频一区二区三区在线观看| 欧美午夜三级| 免费在线播放第一区高清av| 欧美日韩免费观看一区=区三区| 里番精品3d一二三区| 亚洲性视频在线| 在线人成日本视频| 国产精品亚洲人成在99www| 国产一区二区中文| 日韩精品免费视频人成| 亚洲精品伦理| 欧美国产先锋| 久久av综合| 欧美国产亚洲精品| 久久午夜影院| 国产中文欧美日韩在线| 老司机免费视频一区二区三区| 国产一卡不卡| 国产日本精品| 国产精品一页| 国产一区二区三区四区五区传媒| 亚洲久草在线| 日本中文字幕视频一区| 免费视频一区二区| 国产亚洲激情| 免费av一区| 老牛国产精品一区的观看方式| 每日更新成人在线视频| 婷婷成人av| 精品精品久久| 99精品综合| 狠狠色综合网| 中文一区在线| 国产精品视频一区二区三区四蜜臂| 青草综合视频| 九九九精品视频| 国产盗摄——sm在线视频| 国产一区欧美| 日本va欧美va欧美va精品| 久久91视频| 国产高清久久| 欧美日韩一区自拍| 成人影视亚洲图片在线| 伊人久久成人| 国产精品主播在线观看| 欧美日韩在线播放视频| 日本天堂一区| 欧美高清一区| 国产一区2区| 亚洲毛片一区| 亚洲播播91| 亚洲精品美女91| 福利视频一区| 日本va欧美va瓶| 青青久久av| 日韩国产一二三区| 日韩欧美午夜| 国产精品一区二区三区四区在线观看 | 蜜臀久久99精品久久久画质超高清| 视频福利一区| 国产精品毛片aⅴ一区二区三区| 蜜桃tv一区二区三区| 国产成人精品一区二区三区免费| 男人的天堂久久精品| 成人羞羞视频在线看网址| 综合亚洲色图| 日本 国产 欧美色综合| 久久精品国语| 日本蜜桃在线观看视频| 日韩高清不卡一区二区| 午夜在线一区| 亚洲福利专区| 日本一区二区高清不卡| 国产免费久久| 欧美一区二区三区高清视频| 国产精品久久久久久久久久久久久久久 | 久久久影院免费| 精品国产亚洲日本| 欧美日韩18| 91精品国产福利在线观看麻豆| 97精品国产| 亚洲三级欧美| 亚洲视频综合| 亚洲天堂久久| 久久九九国产| 亚洲一级网站| 亚洲激情不卡| 国产精品一线天粉嫩av| 国产精品红桃| 国产成人免费| 成人免费电影网址| 国产一区久久| 天堂成人国产精品一区| 欧美私人啪啪vps| 国产日韩中文在线中文字幕 | 久久久精品久久久久久96| 亚洲综合精品| 亚洲精华国产欧美| 精品亚洲成人| 日韩一区二区三区精品| 麻豆精品蜜桃| 国产欧美日本| 日韩中文字幕| 欧美91视频| 国产乱人伦丫前精品视频| 91久久久久| 97精品视频在线看| 国产欧美日韩视频在线| 欧美日韩国产在线一区| 国产精品久久久久毛片大屁完整版 | 久久精品观看| 欧美不卡视频| 日韩啪啪电影网| 中文字幕在线视频网站| а√天堂中文在线资源8| 国产精品网在线观看| 日韩三级视频| 欧美视频二区| 国产欧美亚洲一区| 国产极品嫩模在线观看91精品| 麻豆一区在线| 成人欧美一区二区三区的电影| 久久久久久婷| 久久精品国产亚洲夜色av网站| 国产一区二区三区自拍| 91国内精品| 久热re这里精品视频在线6| 亚洲va久久| 丰满少妇一区| 国产亚洲一级| 欧美国产日本| 黑人精品一区|