摘要:五不要增加內置的原型增加內置構造函數如,和等的原型屬性是一個增強功能性的強大的方法,但這可能會嚴重影響可維護性,因為這種做法將使代碼變得更加不可預測。推薦使用后者,這樣根據名字就能明顯地區分出變量函數和基本常量等。
一、盡量少用全局變量
減少全局名字空間污染,最理想的情況是一個應用程序僅有一個全局變量。
二、單一var模式var a = 1, b = 2, sum = a + b, c;
只使用一個var在函數頂部進行變量聲明,其好處:
提供一個單一的地址以查找到函數需要的所有局部變量;
防止出現變量在定義之前就被使用的邏輯錯誤;
幫助牢記要聲明變量,以盡可能少地使用全局變量;
更少的代碼(無論是輸入代碼還是傳輸代碼都更少了)。
三、for循環for (var i = 0; i < dom.length; i++) { //DO STH }
每一次循環都查詢dom的長度是很消耗時間的,把dom.length緩存起來,這樣,對長度的值只提取一次,但能應用到整個循環中。
用i++替代以下兩種表達式:i = i + 1; i += 1;
四、for-in循環for-in循環應該用來遍歷非數組對象。使用for-in循環也被稱為枚舉(enumeration)。
從技術上來說,也可以使用for-in循環來遍歷數組(因為在JavaScript中,數組也是對象),但是不推薦用戶這樣使用,因為當該數組對象已經被自定義函數擴大后,這樣做有可能導致邏輯上的錯誤。因此,推薦使用正常的for循環來處理數組,使用for-in循環來處理對象。
當遍歷對象屬性來過濾遇到原型鏈的屬性時,推薦使用hasOwnProperty()函數。
五、不要增加內置的原型增加內置構造函數(如Object(),Array()和Function()等)的原型屬性是一個增強功能性的強大的方法,但這可能會嚴重影響可維護性,因為這種做法將使代碼變得更加不可預 測。其他開發者在使用您的代碼時可能期望內置的JavaScript方法的使用是一致的,而不期望有一些您自己添加的方法。
此外,給原型添加的屬性在沒有使用hasOwnProperty()時可能會在循環中出現,這會導致一些混亂。
六、switch模式var inspect_me = 0, result = ""; switch (inspect_me) { case 0: result = "zero"; break; case 1: result = "one"; break; default: result = "unknown"; }
在每個case語句中使用代碼縮進;
在每個case語句結尾有一個明確的break語句;
避免使用fall-throughs(也就是有意不使用break語句,以使得程序會按順序一直向下執行),如果確實希望采用fall-throughs,那么請確信在代碼中使用fall-throughs的確是最好的途徑,因為在代碼中這樣做會讓其他閱讀您代碼的人以為代碼是有錯誤的;
用default語句來作為switch的結束:當以上所有情形都不匹配時,給出一個默認的結果。
七、避免使用隱式類型轉換在使用比較語句的時候推薦使用===和!===操作符來對數值和類型進行比較。JS代碼質量檢查工具——JSLint,要求嚴格的等價比較,這樣的做法會使得代碼看起來更為一致,并減少在閱讀代碼時的腦力開銷(==的使用是故意的還是無意遺漏的)。
八、避免使用eval()九、使用parseInt()的數值約定“eval( )是一個魔鬼”
parseInt(string, radix);
參數string:要被解析的值。如果參數不是一個字符串,則將其轉換為字符串。字符串開頭的空白符將會被忽略。
參數radix:一個2到36之間的整數值,用于指定轉換中采用的基數。比如參數"10"表示使用我們通常使用的十進制數值系統。總是指定該參數可以消除閱讀該代碼時的困惑并且保證轉換結果可預測。當忽略該參數時,不同的實現環境可能產生不同的結果。
在沒有指定基數,或者基數為 0 的情況下,JavaScript 作如下處理:
如果字符串 string 以"0x"或者"0X"開頭, 則基數是16 (16進制);
如果字符串 string 以"0"開頭, 基數是8(八進制)或者10(十進制),那么具體是哪個基數由實現環境決定。ECMAScript 3認為是八進制;ECMAScript5認為是十進制。因此,永遠都要明確給出radix參數的值。
如果字符串 string 以其它任何值開頭,則基數是10 (十進制)。
詳細資料參考:MDN-parseInt
十、編碼約定確定并一致遵循約定比這個具體約定是什么更為重要。
縮進
需要對哪些內容執行縮進?規則是只需要對大括號中所有的代碼執行縮進。主要包含函數體、循環體(do、while、for、for-in)、if語句、switch語句和對象字面量引用的屬性。
大括號
一直使用大括號
應該經常使用大括號,甚至在可選的情形下,都請使用大括號(if語句for語句只有一行語句的時候)
將開放的大括號放置在前面語句的同一行
開放的大括號放置的位置一般有兩種選擇:
//大括號和語句放在同一行 if (true) { alert("It"s True!"); } //大括號放在接下來的一行 if (true) { alert("It"s TRUE!"); }
采用哪種方式只是個人習慣的不同,但是有些情況下隨著大括號的位置不同,程序的執行結果也會有所不同,這是由分號插入機制(semicolon insertion mechanism)導致的。JavaScript對代碼不會很挑剔,當沒有正確使用分號結束本語句時,它會自動補上。該行為在函數返回一個對象字面量并且開放的大括號位于接下來的一行時會導致問題:
function func() { return { name: "Jason" }; } //由于分號插入機制,上面的寫法等價于下面的寫法 function func() { return; { name: "Jason" }; }
函數func返回的結果是undefined,而不是期望的對象{name: "Jason"},所以推薦將開放的大括號放置在前面語句的同一行。
在語句的末尾一直使用分號
空格
使用空格有助于改善代碼的可讀性和一致性。使用空格比較好的位置包含如下:
操作符(+ - * = == < > <= >= === !== && || +=等)的前后
在分開for循環的各個部分的分號之后:
for (var i = 0; i < 10; i += 1) {}
在限定數組項的逗號后面:
var a = [1, 2, 3];
對象屬性的逗號之后和將屬性名和屬性值分開的冒號之后:
var o = {a: 1, b: 2};
分隔開函數中各個參數的逗號之后:
myFunc(a, b, c)
在函數聲明的大括號之前:
function myFunc() {}
匿名函數關鍵字function之后( )之前:
var myFunc = function () {};
在函數中使用大括號開始符之前,例如if-else語句、循環語句和對象字面量等
在大括號結束符和else或while之間
一個常用的增加可讀性的做法是使用垂直的空格——使用空行來分隔代碼的不同單元
十一、命名約定
構造函數的首字母大寫
var jason = new Person();
分隔單詞
構造函數——大駱駝峰式命名法:MyConstructor( )
函數和方法——小駱駝峰式命名法:myFunction( )、calculateArea( )
變量——小駱駝峰式命名法或者所有的單詞都使用小寫,并用下劃線分隔開各個單詞 :first_name、sold_company_name。推薦使用后者,這樣根據名字就能明顯地區分出變量、函數和基本常量等。
其他命名模式
常量:將變量名全部大寫來表明該變量在程序生命周期中不可改變
//精確的常量,請不要修改 var PI = 3.14, MAX_WIDTH = 800;
為全局變量命名時,約定將所有的字符大寫
var GLOBAL_TIP = "Hello World";
使用一個下劃線前綴來標識私有方法或私有屬性
var person = { _nickName: "jason", getName: function () { return this._nickName + this._getFirst() + "" + this._getLast(); }, _getFirst: function () { //... }, _getLast: function () { //... } }
getName( )意味著這是API的一個公開的方法,而_getFirst( )和_getLast( )意味著這是一個私有函數,_nickName意味著這是一個私有屬性。盡管它們都是普通的公開方法和屬性,但是使用下劃線前綴的表示方法可以提醒使用person對象的用戶,告訴他們這些方法在其他地方不能確保一定能夠正常工作,不能直接調用。
十二、編寫注釋注釋的重要性就不用言表了,當你看到一份通篇都是代碼而沒有一個注釋的文件時,心中也是一萬頭草泥馬奔騰而過吧。
不需要注釋一些比較明顯的代碼:例如每一個變量或每一行都注釋。但通常有必要對所有的函數、函數參數、返回值和其他有趣或不同尋常的算法和技術都用文檔記錄下來。
最重要的習慣,也是最難遵循的習慣就是不斷更新注釋,因為過期的注釋可能會誤導閱讀者,這比沒有注釋還可怕。
參考:《JavaScript模式》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78443.html
摘要:編寫高質量的要點深入理解系列一知識點最小全局變量全局變量命名易與第三方的腳本引起沖突所以盡可能少的使用全局變量是很重要的相關策略有命名空間模式或是函數立即自動執行,但是要想讓全局變量少最重要的還是始終使用來聲明變量。 Title: 編寫高質量Javascript的要點-Review深入理解Javascript系列(一)date: 2017-6-9 14:14:20 status: p...
摘要:前言月份開始出沒社區,現在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了一般來說,差不多到了轉正的時候,會進行總結或者分享會議那么今天我就把看過的一些學習資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區,現在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了!一般來說,差不多到了轉正的時候,會進行總結或者分享會議!那么今天我就...
摘要:用兩個空格代替制表符這是唯一能保證在所有環境下獲得一致展現的方法。編輯器配置將你的編輯器按照下面的配置進行設置,以免常見的代碼不一致和差異用兩個空格代替制表符保存文件時刪除尾部的空白符設置文件編碼為在文件結尾添加一個空白行。 黃金定律 永遠遵循同一套編碼規范 - 可以是這里列出的,也可以是你自己總結的。如果發現規范中有任何錯誤,敬請指正。 HTML 語法 用兩個空格代替制表符 (ta...
閱讀 1948·2021-11-24 10:45
閱讀 1452·2021-11-18 13:15
閱讀 4524·2021-09-22 15:47
閱讀 3902·2021-09-09 11:36
閱讀 2006·2019-08-30 15:44
閱讀 3081·2019-08-29 13:05
閱讀 2495·2019-08-29 12:54
閱讀 1986·2019-08-26 13:47