亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

12條寫出高質量JS代碼的方法

2019-11-19 14:34:38
字體:
來源:轉載
供稿:網友

書寫出高質量的JS代碼不僅讓程序員看著舒服,更加能夠提高程序的運行速度,以下就是武林網的小編整理方法:

一、如何書寫可維護性的代碼

當出現bug的時候如果你能立馬修復它是最好的,此時解決問題的四路在你腦中還是很清晰的。否則,你轉移到其他任務或者bug是經過一定的時間才出現的,你忘了那個特定的代碼,一段時間后再去查看這些代碼就 需要:

1.花時間學習和理解這個問題 2.化時間是了解應該解決的問題代碼

還有個問題,特別對于大的項目或是公司,修復bug的這位伙計不是寫代碼的那個人(且發現bug和修復bug的不是同一個人)。因此,必須降低理解代 碼花費的時間,無論是一段時間前你自己寫的代碼還是團隊中的其他成員寫的代碼。這關系到底線(營業收入)和開發人員的幸福,因為我們更應該去開發新的激動 人心的事物而不是花幾小時幾天的時間去維護遺留代碼。所以創建可維護性代碼是至關重要的,一般可維護性的代碼有以下幾個原則:

可讀性

一致性

可預測性

看上去就像同一個人寫的

已記錄

二、全局變量的問題

全局變量的問題在于,你的JavaScript應用程序和web頁面上的所有代碼都共享了這些全局變量,他們住在同一個全局命名空間,所以當程序的兩個不同部分定義同名但不同作用的全局變量的時候,命名沖突在所難免。web頁面包含不是該頁面開發者所寫的代碼也是比較常見的,例如:

第三方的JavaScript庫

廣告方的腳本代碼

第三方用戶跟蹤和分析腳本代碼

不同類型的小組件,標志和按鈕

例如說,該第三方腳本定義了一個全局變量,叫做A;接著,在你的函數中也定義一個名為A的全局變量。其結果就是后面的變量覆蓋前面的,第三方腳本就一下子失效啦!而且很難debug出來。

因此:盡可能少的使用全局變量是很重要的,例如命名空間模式或是函數立即自動執行,但是要想讓全局變量少最重要的還是始終使用var來聲明變量。

三、忘記var作用的副作用

隱式全局變量和明確定義的全局變量間有些小的差異,就是通過delete操作符讓變量未定義的能力。具體如下:

通過var創建的全局變量(任何函數之外的程序中創建)是不能被刪除的。

沒有通過var創建的隱式全局變量(無視是否在函數中創建)是能被刪除的。

所以隱式全局變量并不是真正的全局變量,但它們是全局對象的屬性。屬性是可以通過delete操作符刪除的,而變量是不能的,具體代碼我就不寫了。

四、訪問全局對象

在瀏覽器中,全局對象可以通過window屬性在代碼的任何位置訪問(除非你做了些比較出格的事情,像是聲明了一個名為window的局部變量)。但是在其他環境下,這個方便的屬性可能被叫做其他什么東西(甚至在程序中不可用)。如果你需要在沒有硬編碼的window標識符下訪問全局對象,你可以在任何層級的函數作用域中做如下操作:

var global = (function () { return this; }());

五、for循環

在for循環中,你可以循環取得數組或是數組類似對象的值,譬如arguments和HTMLCollection對象。通常的循環形式如下:

// 次佳的循環 for (var i = 0; i < myarray.length; i++) { // 使用myarray[i]做點什么 }

這種形式的循環的不足在于每次循環的時候數組的長度都要去獲取下。這回降低你的代碼,尤其當myarray不是數組,而是一個HTMLCollection對象的時候。

六、不擴展內置原型

擴增構造函數的prototype屬性是個很強大的增加功能的方法,但有時候它太強大了。增加內置的構造函數原型(如Object(), Array(), 或Function())挺誘人的,但是這嚴重降低了可維護性,因為它讓你的代碼變得難以預測。使用你代碼的其他開發人員很可能更期望使用內置的 JavaScript方法來持續不斷地工作,而不是你另加的方法。另外,屬性添加到原型中,可能會導致不使用hasOwnProperty屬性時在循環中顯示出來,這會造成混亂。

七、避免隱式類型轉換

JavaScript的變量在比較的時候會隱式類型轉換。這就是為什么一些諸如:false == 0 或 “” == 0 返回的結果是true。為避免引起混亂的隱含類型轉換,在你比較值和表達式類型的時候始終使用===和!==操作符。

var zero = 0; if (zero === false) { // 不執行,因為zero為0, 而不是false } // 反面示例 if (zero == false) { // 執行了... }

八、避免eval()

如果你現在的代碼中使用了eval(),記住該咒語“eval()是魔鬼”。此方法接受任意的字符串,并當作JavaScript代碼來處理。當有 問題的代碼是事先知道的(不是運行時確定的),沒有理由使用eval()。如果代碼是在運行時動態生成,有一個更好的方式不使用eval而達到同樣的目 標。例如,用方括號表示法來訪問動態屬性會更好更簡單:

// 反面示例 var property = "name"; alert(eval("obj." + property)); // 更好的 var property = "name"; alert(obj[property]);

使用eval()也帶來了安全隱患,因為被執行的代碼(例如從網絡來)可能已被篡改。這是個很常見的反面教材,當處理Ajax請求得到的JSON 相應的時候。在這些情況下,最好使用JavaScript內置方法來解析JSON相應,以確保安全和有效。若瀏覽器不支持JSON.parse(),你可 以使用來自JSON.org的庫。

同樣重要的是要記住,給setInterval(), setTimeout()和Function()構造函數傳遞字符串,大部分情況下,與使用eval()是類似的,因此要避免。在幕后,JavaScript仍需要評估和執行你給程序傳遞的字符串:

// 反面示例 setTimeout("myFunc()", 1000); setTimeout("myFunc(1, 2, 3)", 1000); // 更好的 setTimeout(myFunc, 1000); setTimeout(function () { myFunc(1, 2, 3); }, 1000);

使用新的Function()構造就類似于eval(),應小心接近。這可能是一個強大的構造,但往往被誤用。如果你絕對必須使用eval(),你 可以考慮使用new Function()代替。有一個小的潛在好處,因為在新Function()中作代碼評估是在局部函數作用域中運行,所以代碼中任何被評估的通過var 定義的變量都不會自動變成全局變量。另一種方法來阻止自動全局變量是封裝eval()調用到一個即時函數中。

考慮下面這個例子,這里僅un作為全局變量污染了命名空間。

console.log(typeof un); // "undefined" console.log(typeof deux); // "undefined" console.log(typeof trois); // "undefined" var jsstring = "var un = 1; console.log(un);"; eval(jsstring); // logs "1" jsstring = "var deux = 2; console.log(deux);"; new Function(jsstring)(); // logs "2" jsstring = "var trois = 3; console.log(trois);"; (function () { eval(jsstring); }()); // logs "3" console.log(typeof un); // number console.log(typeof deux); // "undefined" console.log(typeof trois); // "undefined"

另一間eval()和Function構造不同的是eval()可以干擾作用域鏈,而Function()更安分守己些。不管你在哪里執行 Function(),它只看到全局作用域。所以其能很好的避免本地變量污染。在下面這個例子中,eval()可以訪問和修改它外部作用域中的變量,這是 Function做不來的(注意到使用Function和new Function是相同的)。

(function () { var local = 1; eval("local = 3; console.log(local)"); // logs "3" console.log(local); // logs "3" }()); (function () { var local = 1; Function("console.log(typeof local);")(); // logs undefined

九、編碼規范

建立和遵循編碼規范是很重要的,這讓你的代碼保持一致性,可預測,更易于閱讀和理解。一個新的開發者加入這個團隊可以通讀規范,理解其它團隊成員書寫的代碼,更快上手干活。

十、縮進

代碼沒有縮進基本上就不能讀了。唯一糟糕的事情就是不一致的縮進,因為它看上去像是遵循了規范,但是可能一路上伴隨著混亂和驚奇。重要的是規范地使用縮進。

十一、注釋

你必須注釋你的代碼,即使不會有其他人向你一樣接觸它。通常,當你深入研究一個問題,你會很清楚的知道這個代碼是干嘛用的,但是,當你一周之后再回來看的時候,想必也要耗掉不少腦細胞去搞明白到底怎么工作的。

很顯然,注釋不能走極端:每個單獨變量或是單獨一行。但是,你通常應該記錄所有的函數,它們的參數和返回值,或是任何不尋常的技術和方法。要想到注 釋可以給你代碼未來的閱讀者以諸多提示;閱讀者需要的是(不要讀太多的東西)僅注釋和函數屬性名來理解你的代碼。例如,當你有五六行程序執行特定的任務, 如果你提供了一行代碼目的以及為什么在這里的描述的話,閱讀者就可以直接跳過這段細節。沒有硬性規定注釋代碼比,代碼的某些部分(如正則表達式)可能注釋 要比代碼多。

十二、花括號{}

花括號(亦稱大括號,下同)應總被使用,即使在它們為可選的時候。技術上將,在in或是for中如果語句僅一條,花括號是不需要的,但是你還是應該總是使用它們,這會讓代碼更有持續性和易于更新。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
5566成人精品视频免费| 91av在线国产| 97久久精品国产| 成人免费大片黄在线播放| 日韩中文字幕久久| 色综合天天狠天天透天天伊人| 日韩中文字幕在线视频| 81精品国产乱码久久久久久| 91久久精品日日躁夜夜躁国产| 成人写真视频福利网| 成人欧美一区二区三区在线湿哒哒| 九九视频这里只有精品| 国产精选久久久久久| 久久天堂av综合合色| 亚洲女人天堂av| 欧美精品一二区| 亚洲va久久久噜噜噜| 欧美电影在线观看高清| 97久久精品视频| 亚洲精品日韩激情在线电影| 亚洲色图日韩av| 欧美电影在线观看| 国产91色在线| 国产亚洲欧洲高清| 欧美性视频在线| 日本国产高清不卡| 亚洲第一区中文字幕| 久久久久久成人精品| 国产亚洲精品美女久久久| 欧美电影免费观看电视剧大全| 国产精品偷伦视频免费观看国产| 综合av色偷偷网| 日韩精品免费电影| 狠狠色狠色综合曰曰| 日本不卡视频在线播放| 91亚洲精华国产精华| 狠狠色狠狠色综合日日五| 日韩亚洲精品视频| 亚洲精品suv精品一区二区| 国产精品美女主播| 精品国产一区二区三区在线观看| 成人精品aaaa网站| 欧美日韩成人在线观看| 国产视频久久久久| 国产精品美女主播| 欧美性猛交xxxx黑人猛交| 精品久久久久久久中文字幕| 国产成人av网| 久久精品国产精品亚洲| 91精品国产色综合久久不卡98口| 亚洲一区av在线播放| 国产精品美女av| 国产日韩欧美电影在线观看| 欧美高清videos高潮hd| 亚洲欧美日韩高清| 66m—66摸成人免费视频| 在线观看不卡av| 欧美极品欧美精品欧美视频| 4438全国亚洲精品在线观看视频| 欧美在线视频在线播放完整版免费观看| 亚洲天堂av网| 欧美日本啪啪无遮挡网站| 国产欧美日韩专区发布| 中文字幕亚洲综合久久筱田步美| 91高清视频免费观看| 久久国产精品久久久久久| 亚洲精品美女网站| 在线观看国产精品日韩av| 最新的欧美黄色| 国产亚洲一区二区在线| 色99之美女主播在线视频| 欧美性xxxx极品hd欧美风情| 亚洲深夜福利视频| 久久成人精品电影| 热草久综合在线| 日韩一区二区欧美| 国产精品国产福利国产秒拍| 亚洲精品黄网在线观看| 亚洲第一区在线观看| 91日本在线视频| 成人激情春色网| 久久九九有精品国产23| 亚洲一区二区三区乱码aⅴ| 性色av一区二区三区红粉影视| 色七七影院综合| 成人深夜直播免费观看| 国产精品∨欧美精品v日韩精品| 日韩精品在线影院| 日韩美女视频在线观看| 欧美日韩国产成人| www国产精品视频| 欧美精品福利视频| 亚洲人成伊人成综合网久久久| 欧美久久精品午夜青青大伊人| 欧美性猛交xxxx乱大交极品| 日韩一级黄色av| 欧美精品videosex极品1| 久久久电影免费观看完整版| 伊人av综合网| 国产日韩欧美一二三区| 亚洲色图日韩av| 国产精品视频播放| 国产精品久久久久久久久久久久| 亚洲午夜精品久久久久久性色| 粉嫩老牛aⅴ一区二区三区| 久久亚洲国产精品| 成人天堂噜噜噜| 亚洲字幕在线观看| 欧美激情久久久| 亚洲福利影片在线| 成人免费大片黄在线播放| 91亚洲精品久久久久久久久久久久| 日韩毛片在线看| 欧美午夜片欧美片在线观看| 中文字幕亚洲专区| 国内自拍欧美激情| 日本精品va在线观看| 国产成人综合亚洲| 欧美另类69精品久久久久9999| 久久久久久69| 国产美女高潮久久白浆| 国产欧美一区二区三区久久| 午夜精品久久久久久99热软件| 久久久久久尹人网香蕉| 国产精品aaaa| 91免费视频网站| 中文字幕日韩欧美在线视频| 亚洲视频777| 亚洲人成伊人成综合网久久久| 色婷婷av一区二区三区在线观看| 538国产精品一区二区在线| 国产精品久久久久久久久久久久久久| 成人夜晚看av| 国产日韩在线免费| 少妇高潮 亚洲精品| 亚洲第一区在线| 欧美黄网免费在线观看| 国产成人一区二区三区| 中文字幕欧美日韩| 亚洲成年网站在线观看| 国产亚洲综合久久| 久久97久久97精品免视看| 亚洲精品有码在线| 欧美日韩福利在线观看| 欧美高跟鞋交xxxxxhd| 欧美黑人性生活视频| 久久91精品国产91久久久| 一区二区三区无码高清视频| 欧美一区二区大胆人体摄影专业网站| 欧美精品激情在线| 日韩资源在线观看| 日韩在线欧美在线| 欧美大片第1页| 成人亚洲欧美一区二区三区| 中日韩美女免费视频网站在线观看| 欧美成人网在线| 亚洲国产精品va在线| 国产精品日韩精品| 日韩国产中文字幕| 97精品国产97久久久久久春色| 日本精品久久久久影院| 久久久亚洲福利精品午夜| 国产精品老女人精品视频| 欧美精品日韩www.p站|