日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译)

發布時間:2024/1/8 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原版的:24 JavaScript Best Practices for Beginners

(注:閱讀原文的時候沒有注意公布日期,覺得不錯就翻譯了,翻譯到JSON.parse那一節覺得有點不正確路才發現是2009年公布的文章,只是還是不錯的啦。

另外,文章雖說24條最佳實踐。其實僅僅有23條,不知道原作者怎么漏了一條。

1.優先使用===,而不是==

JavaScript使用兩種相等性操作符:===|!==和==|!=。通常覺得做比較的最佳實踐是使用前一組操作符。

“若兩個操作數的類型和值同樣,那么===比較的結果為真,!==比較的結果為假。” — JavaScript語言精粹(JavaScript: The Good Parts)

然而。假設使用==和!=,當比較不同類型的操作數時,你就會碰到問題啦。在這樣的情況下,這組操作符會嘗試對操作數的值做沒用的強制轉換。

2.Eval就是糟糕的代名詞

對于那些不熟悉JavaScript的人來說,函數”evel”讓我們可以訪問JavaScript編譯器。我們可以通過給”eval”傳遞一個字符串參數來得到該字符串運行的結果。

這不僅會極大地降低你的腳本的性能。也會造成一個巨大的安全隱患,由于這賦予傳遞進來的純文本太多的能力。要盡可能地避免eval函數的使用。

3.不要懶手

技術上來說,你確實可能僥幸地省略多數花括號和分號。

大多數瀏覽器都可以正確地解釋例如以下代碼片段:

if(someVariableExists)x = false

然而,再考慮一下這段代碼:

if(someVariableExists)x = falseanotherFunctionCall();

可能會有人覺得上一段代碼等價于:

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

非常不幸,他錯了。其實。它的本意是:

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

你應該也注意到了。代碼中縮進模仿了花括號的功能。毋庸置疑,這是非常恐怖的做法,不管怎樣都應該避免。唯一可以省略花括號的時候是在一行式的語句中。但即使這樣的情況,也是非常有爭議的。

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

始終要想著以后

假設以后的某個時候,你須要在這樣的if語句中添加很多其它的命令,那該怎么辦呢?沒法子。你就僅僅能重寫這塊代碼了。處理這個問題的底線是對于省略寫法保持慎重。

4.使用JS Lint

JSLint是Douglas Crockford編寫的一個調試器。

簡單地將你的腳本拷貝進去,它就會高速地掃描你的代碼中不論什么明顯的問題和錯誤。

“JSLint獲取一份JavaScript源代碼,然后掃描代碼。假設發現問題,就會返回一條信息描寫敘述這個問題以及這個問題在源代碼中的大致位置。

問題盡管常常是語法錯誤,卻不一定是。JSLint也會查看一些風格習慣以及結構問題。它并不證明你的代碼是否正確,僅僅是提供另外的一雙眼睛來幫助發現問題。”—JSLint文檔

在結束腳本代碼的編寫之前。對其運行一次JSLint。可以保證你不會犯一些愚蠢的錯誤。

5.將腳本置于頁面的底部

這條技巧在本系列前面的文章中也推薦過。由于它在此處也非常合適(As it’s highly appropriate though),所有我將那段信息直接粘貼在這里。


記住—這條最佳實踐的主要目標是盡可能高速地為用戶載入頁面。當載入一個腳本時。瀏覽器直到整個腳本文件所有載入完畢才干繼續。因此,用戶必須等上更長的時間才干注意到不論什么的進度。

假設JS文件的目的僅僅是添加功能—比如,在點擊某個button后—那么就將那些文件放在底部,body結束標簽之前吧。

這絕對是一個最佳實踐。

更好的做法

<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”語句之時。僅僅讓解釋引擎做必須干的活吧。比如:

糟糕的做法

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 -- or window.name

更好的做法

var DudeNameSpace = {name: 'Jeffrey',lastname: 'Way',doSometing: function() {...} } console.log(DudeNameSpace.name); // Jeffrey

注意我們是怎樣將全局性的“足跡”降低為一個命名可笑的”DudeNameSpace”對象的。

9.凝視你的代碼

一開始看起來似乎沒有必要。但請相信我。你將會想盡可能好地凝視你的代碼。當你幾個月后再次回到項目。會發生什么呢?發現你根本沒法輕松地記起當初對每一行代碼的想法。或者。假設你的某個同事須要改動你的代碼。那又會怎么樣呢?始終,一直記著凝視你代碼的重要部分吧。

// Cycle through array and echo out each name for(var i = 0, len = array.length; i < len; i++) {console.log(array[i]); }

10.擁抱漸進增強

始終考慮到怎樣處理JavaScript禁用的情況。或許你會想“大多數我網頁的閱讀器都是啟用JavaScript的,因此我不操心這個問題。”然而。這會是一個巨大的錯誤。

你曾花時間去看過關閉JavaScript后你的美麗的滑動條是什么樣么?(下載Web開發人員工具欄以方便干這事。)或許它會全然破壞你的網站。依照以往經驗,設計你的網站時應假設將會禁用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。

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

13.使用{}而不是New Object()

JavaScript中有多種創建對象的方式。或許更傳統的方式是使用”new”構造器,像這樣:

var o = new Object(); o.name = 'Jeffrey'; o.lastname = 'Way'; o.someFuncion = 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中一個常見的錯誤是須要數組時使用對象或須要對象時使用數組。規則非常easy:當屬性名是小的連續整數時,你應該使用數組。否則,使用對象”—Douglas Crockford

15.一長串變量?省略”var”keyword,使用逗號替代

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

18.”For in”語句

遍歷對象內的成員時。你也會得到方法函數。

為了解決問題,應始終將你的代碼包裝在一個if語句中來過濾信息。

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

引自JavaScript: 語言精粹, Douglas Crockford著

19.使用Firebug的”Timer”特性來優化代碼

須要一種高速簡單的方法來檢測一個操作花費多長時間么?使用Firebug的”timer”特性記錄結果。

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

20.閱讀。閱讀。再閱讀

我是一個Web開發博客的超級粉絲(比方這個博客!

)。但吃午餐或者睡前,博客確實不是書籍的替代品。始終在你的床前桌上放一本wen開發書籍吧。

例如以下是一些我最喜歡的JavaScript書籍。

  • 面向對象的JavaScript
  • JavaScript:語言精粹
  • 學習jQuery 1.3
  • 學習JavaScript

多閱讀幾遍。我仍舊在讀。

21.自運行函數(Self-Executing Functions)

相比調用函數。當頁面載入或調用父函數時,讓函數自己主動運行會簡單些。簡單地將你的函數包裝在圓括號內,并加入額外的一對圓括號。其本質上就調用了這個函數。

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

22.原始(raw)JavaScript代碼的運行速度始終快于使用代碼庫

JavaScript代碼庫,如jQuery和Mootools,可以為你節省大量的編碼時間—特別是使用AJAX操作。話雖如此。始終謹記代碼庫的運行速度始終是比不上原始JavaScript代碼的(假設了代碼的正確性)。

jQuery的”each”方法用來做遍歷非常贊,但使用原生”for”語句始終會快一些。

23.Crockford的JSON.Parse

盡管JavaScript 2應該有一個內置的JSON解析器,但寫本文之時,我們仍舊須要自己實現。

Douglas Crockford。JSON的創造者,已經實現了一個解析器供你使用。可以從這里下載。

簡單地導入該腳本。你就能獲得一個新的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>'; }

24.刪除”Language”

幾年前,在script標簽內常見有”language”屬性。

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

然而,這個屬性非常早就被棄用了,所以就不要再使用了。

就這些了。同志們

如今你知道這JavaScript剛開始學習的人應該知道的24條基本技巧。

有機會,讓我知道你現在的提示。感謝您的閱讀。


轉載于:https://www.cnblogs.com/lcchuguo/p/4615333.html

總結

以上是生活随笔為你收集整理的JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.久久综合 | 天天操人人干 | 亚洲成年人影院 | 日本高清黄色电影 | 在线观看毛片av | 51免费看成人啪啪片 | 婷婷色一区二区三区 | 久久精品免费观看 | 丁香花高清在线观看完整动漫 | 波多野结衣久久精品 | 日韩毛片一级 | a资源在线| 日本美女久久久 | 亚洲精品国产一区二区 | 国产欧美在线观看不卡 | 91免费网站入口 | 国产高清欧美 | a黄色大片| 99热在线这里只有精品 | 99草| 你懂得在线视频 | 色小姐综合网 | 申鹤乳液狂飙 | 亚洲欧美一区二区三区不卡 | 日本韩国免费观看 | 国产第一草草影院 | 原神淫辱系列同人h | 成人免费黄色av | 亚洲大胆视频 | 久久精品牌麻豆国产大山 | 国产成人精品在线 | 三级免费黄录像 | 播播开心激情网 | 裸体av淫导航 | 粗大挺进潘金莲身体在线播放 | 天天干天天玩 | av男人天堂网 | 嫩模被强到高潮呻吟不断 | 95国产精品 | 后进极品白嫩翘臀在线视频 | 福利视频99 | 欧美黑人又粗又大的性格特点 | 高h调教冰块play男男双性文 | 欧美变态口味重另类在线视频 | 丁香花电影免费播放电影 | 狠狠干2020| 超碰av在线免费观看 | 亚洲热在线视频 | 日韩不卡视频在线 | 麻豆影视国产在线观看 | 精品国产视频一区二区 | 久久爱影视i | 张津瑜国内精品www在线 | 久久国语对白 | 日本精品网站 | 理论片亚洲 | 亚洲少妇一区二区三区 | 最近中文字幕在线免费观看 | 成人在线视频在线观看 | 日韩欧美一级在线 | 成人免费短视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 一级片在线观看视频 | 亚洲一区二区三区在线免费观看 | 无码人妻精品一区二区三区夜夜嗨 | 波多野av在线 | 夜夜激情| 中文字幕免费视频观看 | 色偷偷免费费视频在线 | 国产精品传媒视频 | 香蕉久久夜色精品 | av男女| 最新久久久 | 福利毛片 | 在线观看视频亚洲 | 亚洲美女毛片 | 亚洲乱仑| 久久午夜激情 | 国产精品久久久网站 | 国产精品com | 肉色欧美久久久久久久免费看 | 中文字幕亚洲区 | av免费精品| 午夜日韩 | 日韩成人综合网 | 成人黄色性视频 | 日本四级电影 | 黄色大片网址 | 国产欧美视频在线播放 | 337p日本欧洲亚洲大胆张筱雨 | 亚洲国产小视频 | 日本成人精品 | 久久国产精品久久久久久 | 稀缺呦国内精品呦 | 黑人操亚洲女人 | 日韩在线观看你懂的 | julia在线播放88mav | 粗喘呻吟撞击猛烈疯狂 | 哪里可以免费看毛片 |