JavaScript的團隊編程規範

來源:互聯網
上載者:User

本規範是針對javascript函數式編程風格與公司嚴重依賴於jQuery進行編碼的現實制定出來。

禁止使用eval,with與caller(ecma262 v5 的use strict要求)。eval只允許在加密時機器產生。

聲明變數必須加上 var 關鍵字,除了在for(;;)迴圈等語句中,原則上不允許使用連續聲明。因為連 續聲明的效率不如分開聲明高,而且很容易手誤致其暴露到全域範圍下。

常量,全部大寫。

變數名,不能使用拼音,英文單詞以駝峰風格組織起來。

分號,能加的地方都加(基本上除了for, function, if, switch, try, while外),防止因為這個問題導致壓縮失敗。

自訂類,只能用於UI庫的構建,業務代碼不準私自訂類。

原則上不允許使用偽對象(String, Number,Boolean),直接用其字面量。

原則上不允許使用Array與Object,直接用其字面量[], {}。

謹慎處理this,防止綁定失效,指向window,建議使用that引用它。

若想調用函數自身,禁止使用命名函數運算式,在目標函數的第一行編寫以下代碼實現,詳解請google 《命名函數運算式揭秘》:

var self = arguments.callee;

禁止擴充原生對象的原型,特別是Object.prototype。

禁止在頁面上對某個元素繫結事件,即下面的代碼風格:

<a href="www.bkjia.com" jump="bbb" onclick="goto(this.jump)">幫客之家</a>

禁止使用IE的條件注釋,一壓縮就沒有了。

var f = function () {    /*@cc_on if (@_jscript) { return 2* @*/  3; /*@ } @*/};

禁止塊內函式宣告,詳解請google《命名函數運算式揭秘》。

if (x) { //ng  function foo() {}} if (x) {  var foo = function() {}}

for-in 迴圈只能用於object。

禁止使用多行字串,因為在編譯時間, 不能忽略行起始位置的空白字元; "\" 後的空白字元會產生奇 怪的錯誤; 雖然大多數指令碼引擎支援這種寫法, 但它不是 ECMAScript 的標準規範。

var myString = 'A rather long string of English text, an error message \                actually that just keeps going and going -- an error \                message to make the Energizer bunny blush (right through \                those Schwarzenegger shades)! Where was I? Oh yes, \                you\'ve got an error and all the extraneous whitespace is \                just gravy.  Have a nice day.';

原則上不允許字串拼接HTML代碼,請使用前台模板或後台模板。

字串字面量,使用 ' 優於 "。

注釋,使用JSDoc。

每一行不宜過長,寫完一段代碼後請用IDE把它格式化一下。

為元素添加自訂變數,統一使用"data-"首碼,放便與HTML5的"data-*"機制相銜接。

禁止jQuery使用一行以上的鏈式操作,非常難讀。

元素的選擇,多使用ID選取器,類別選取器,標籤選取器,慎用子項目結構偽類與位置偽類(nth- child,:first,:eq,:gt)

在已有jQuery對象搜找附近的元素節點,不建議用使用多級的find尋找,而使用相關的遍曆函數。

JavaScript程式應盡量放到外部的JS檔案中,以便壓縮與緩衝。

標準特性優於非標準特性(如果類庫有提供,優先使用類庫中的函數)。

$("XXXX").find("YYYY").find("ZZZZ"); //ng$("XXXX").next() //或者nextUntil, nextAll, prev, prevAll, prevUntl, children, closest, .siblings

為元素添加事件時,考慮的順序是delegate > live > bind。

jQuery在以下事件中存在問題 change resize mouseenter mouseleave mousewheel,大體上用不了事件代理,像mousewheel事件只能藉助於外掛程式。

不在JS檔案中留下未來確定不再使用的程式碼片段。

凡是被jQuery引用到的ID或類名都應該用js_作為首碼,警示其他人在調整樣式時把它誤刪了。

JS代碼必須置於$$命名空間對象之內,所有函數的執行從main函數開始。

     ;;;$(function(){//...其他用到的變數        var $$ = window.$$ = {          //本頁面私人的輔助函數1          _assist1:function(){           },          //本頁面私人的輔助函數2          _assist2:function(){           },          //本頁面私人的輔助函數3          _assist3:function(){           },          //本頁面私人的輔助函數4          _assist4:function(){           },          //本頁面私人的輔助函數5          _assist5:function(){           },//....更多的私人函數          //功能1          feature1:function(){           },          //功能2          feature2:function(){           },          //功能3          feature3:function(){           },          //功能4          feature4:function(){           },          //功能5          feature5:function(){           },          //從後台擷取的JSON資料統一放到這個對象中,以便其他函數調用          jsons:{},//....更多需求,一個需求對應一個函數          main:function(){            $$.feature1();            $$.feature2();            $$.feature3();            $$.feature4();//....在main主函數中調用它們。          }        }        $$.main();      });

從後台擷取JSON資料的格式統一為

$.getJSON(url,params,function(json){     if(json && json.status === "1"){       $.flash(json.msg);       $$.jsons["xxxx"] = json;//將JSON儲存起來     }else{       $.flash(json.msg,"error")     }});$.post(url,params,function(json){     if(json && json.status === "1"){       $.flash(json.msg);       $$.jsons["xxxx"] = json;     }else{       $.flash(json.msg,"error")     }},"json");

為了實現請求與執行回調相分離,我們使用dependBy函數,這樣就有效避免多層嵌套的回調,讓代碼的易懂性大大提高。

$.dependBy(["list_configs"],$$.jsons,function(){     var json = $$.jsons.ist_configs;     //......其他代碼}); 

暫時想到這麼多,如果你有什麼好建議,不吝賜教。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.