JavaScript最佳實踐一

jopen 9年前發布 | 13K 次閱讀 JavaScript開發 JavaScript

變量和函數名有意義

選擇易理解和簡短的名字作為變量和方法。

糟糕的命名

x1 fe2 xbqne

同樣糟糕的命名

incrementerForMainLoopWhichSpansFromTenToTwenty }
createNewMemberIfAgeOverTwentyOneAndMoonIsFull

盡量避免使用變量和方法的名字去解釋值。

或許在其他一些國家是沒有意義

isOverEighteen() 

通用

isLegalAge() 

你的代碼就是一個故事,請保持故事情節深入人心(容易閱讀)。

避免全局

全局變量是一個相當可怕的。

原因:你代碼中的全局變量即有可能被覆蓋。

變通:使用閉包和模塊模式。

問題:所有的全局變量在其他地方都可以訪問,這是不可避免的。

var current = null; 
var labels = { 'home':'home', 'articles':'articles', 'contact':'contact' }; function init(){
}; function show(){
   current = 1;
}; function hide(){
   show();
};

對象字面量:其中的任何東西都需要通過對象的名字獲得。

問題:重復的模塊名字會產生大量的代碼而且令人厭煩。

demo = {
   current:null,
   labels:{ 'home':'home', 'articles':'articles', 'contact':'contact' },
   init:function(){
   },
   show:function(){
      demo.current = 1;
   },
   hide:function(){
      demo.show();
   }
}

模塊模式:你需要指出哪些可以全局使用哪些不可以--在這兩之間取舍。

問題:重復的模塊名字,內部函數使用不同的語法。

module = function(){ var labels = { 'home':'home', 'articles':'articles', 'contact':'contact' }; return {
      current:null,
      init:function(){
      },
      show:function(){ module.current = 1;
      },
      hide:function(){ module.show();
      }
   }
}();

揭露模塊模式:保持相同的代碼風格同時暴露全局方法和變量。

module = function(){ var current = null; 
var labels = { 'home':'home', 'articles':'articles', 'contact':'contact' }; 
var init = function(){
   }; var show = function(){
      current = 1;
   }; var hide = function(){
      show();
   } return{init:init, show:show, current:current}
}(); module.init();

使用嚴格模式

瀏覽器的JavaScript解析引擎有很強大的容錯能力,當你需要移植代碼或者交接代碼給同事時,松散的代碼就會給你帶來麻煩。所以代碼檢查才能保證代碼的安全。

檢查你的代碼:http://www.jslint.com/

代碼注釋適中為好

好的代碼不需解釋

這是一個夸張的迷信。

注釋那些你認為需要解釋的地方,但是記住不要講解你的人生故事(不要太長)。

避免使用單行注釋//,使用/ /更安全,當換行時不會產生錯誤。

如果你使用注釋來調試代碼,這是一個很好的技巧:

module = function(){
   var current = null;
/*
   var init = function(){
   };
   var show = function(){
      current = 1;
   };
   var hide = function(){
      show();
   }
// */ return{init:init, show:show, current:current}
}();

注釋不能出現在用戶面前。開發代碼不是活的代碼(開發代碼不是面向用戶的代碼)

避免技術混用

JavaScript很擅長計算,獲取外部數據(Ajax)以及根據事件做出相應的回應。

例如:

在類名為mandatory且其值為空時在外圍加上紅色邊框。

var f = document.getElementById('mainform');
var inputs = f.getElementsByTagName('input'); 
for(var i=0,j=inputs.length;i<j;i++){
   if(inputs[i].className === 'mandatory' && inputs.value === ''){
      inputs[i].style.borderColor = '#f00';
      inputs[i].style.borderStyle = 'solid';
      inputs[i].style.borderWidth = '1px';
   }
} 

兩個月后,產品改版不要加紅色邊框,要在在字段后面增加一個提示圖標。

其他開發會改變你的JavaScript代碼為如下:

var f = document.getElementById('mainform');
var inputs = f.getElementsByTagName('input'); 
for(var i=0,j=inputs.length;i<j;i++){
   if(inputs[i].className === 'mandatory' && inputs.value === ''){
      inputs[i].className+=' error';
   }
} 

使用短路符號

你一旦習慣使用短路符號,就會發現你的代碼簡潔并且容易閱讀。

原代碼:

var lunch = new Array(); 
lunch[0]='Dosa'; 
lunch[1]='Roti'; 
lunch[2]='Rice'; 
lunch[3]='what the heck is this?'; 

改后代碼:

var lunch = [ 'Dosa', 'Roti', 'Rice', 'what the heck is this?'
];

原代碼:

if(v){ var x = v;
} else { var x =10;
}

改后代碼:

var x = v || 10; 

模塊化

保持代碼模塊化和職責單一性。

很容易寫出一個方法來處理好多事情,可是當你要擴展功能時,你應該拆分多個方法去實現相應的功能。

為了防止出現類似的情況,你應該保證代碼的簡單和通用去完成功能,而不是大而全的方法去實現。

在另一個功能時,你可以使用揭示模式暴露方法以此來擴展方法。

好的代碼應該容易擴展而不需要重寫核心代碼。

漸進增強

避免JavaScript代碼的高度耦合。

DOM的生成耗費時間并且代價昂貴。

有些元素的生成依賴JavaScript,但當JavaScript代碼被禁用時,用戶看到的頁面就不會那么友好。

允許配置和轉移

你的代碼會隨時被改變。

包括標簽,類名和IDs以及外觀。

把這些放到可配置項中,使你的代碼易維護并可定制。

例如:

carousel = function(){ var config = {
      CSS:{
         classes:{
            current:'current',
            scrollContainer:'scroll' },
         IDs:{
            maincontainer:'carousel' }
      },
      labels:{
         previous:'back',
         next:'next',
         auto:'play' },
      settings:{
         amount:5,
         skin:'blue',
         autoplay:false },
   }; function init(){
   }; function scroll(){
   }; function highlight(){
   }; return {config:config,init:init}
}();

總結

在這一節,我們講到來命名規范,注釋以及一些代碼組織的建議。

原文:javascript-best-practices-1

來自:http://zhuxinyong.com/2014/11/13/JavaScript%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E4%B8%80/
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!