最近花了一周時間把《編寫可維護的js》 閱讀了一遍, 現(xiàn)將全書提到的JS編程最佳實踐總結如下贤惯, 已追來者啼辣!
return 之后不可直接換行, 否則會導致ASI(自動分號插入機制)會在return 后插入一個分號畏腕。
一行語句最多不超過80個字符, 如果超過則應該在運算符后換行茉稠,并且追加兩個縮進描馅。
采用駝峰式命名,變量前綴為名詞如:myName 函數(shù)應該以動詞開始如:getName,常量應該以大寫字母命名而线,如:MAX_COUNT铭污, 構造函數(shù)首字母大寫。
數(shù)字的寫法: 整數(shù):count =10 小數(shù) count =10.0; 十六進制寫法0xA2 科學計數(shù)法1e23 不推薦使用八進制寫法膀篮。
如下場景應該使用null: 1. 為可能賦值為對象的變量初始化嘹狞。 2. 在函數(shù)中誓竿, 如果參數(shù)期望是對象磅网, 當做參數(shù)傳入, 返回值同理烤黍。
如下場景不應該使用null:
1.檢測參數(shù)是否傳入知市。
2.檢測未初始化的變量速蕊。null應該當做是對象的占位符嫂丙。
undefine應該避免使用。
聲明對象和數(shù)組使用字面量直接量规哲。如 var arry =[1,2,3];
case語句應該以break結尾跟啤。 1
禁止使用with語句唉锌。
fo-in循環(huán)會遍歷對象以及對象原型的屬性隅肥,所以應該使用hasOwnProperty()來過濾掉原型屬性。如果需要遍歷原型的屬性袄简, 應該加上注釋腥放。
數(shù)組應該使用 for循環(huán) 遍歷。
盡量避免變量提升绿语。
不要使用全局的嚴格模式秃症, 盡量在函數(shù)中使用。
推薦使用 === 來比較
禁止使用eval() 和Function
禁止使用 String Name 這樣的原始包裝類型來創(chuàng)建新對象吕粹。 例如 var name = new String("name");
當需要通過JS來修改樣式時种柑, 應該操作className。推薦使用html5的方法:ele.classList.add("className");
避免使用全局變量匹耕。推薦以一下幾種方式替代:
1.創(chuàng)建唯一的全局對象聚请。
2.創(chuàng)建命名空間
3.以函數(shù)形式封裝起來稳其。-
事件處理有兩個原則:
1.隔離應用邏輯
2.不要分發(fā)事件對象驶赏。用例:var myApp = { handlClick:function(event){ this.show(event.clientX, event.clientY);//杜絕分發(fā)事件 對象 } }; addListener(ele,"click, function(event){ myApp.handlClick(event); //與應用層隔離 }
避免 與null比較炸卑, 除非確實需要與null比較。應該使用typeof, typeof也不應該對null進行檢測煤傍。
檢測引用值應該使用value instanceof constructor
檢測數(shù)組使用isArry()方法
檢測屬性應該使用in 關鍵字 if("cout" in object){}; ie8以下不支持 可以使用hasOwnProperty();
配置數(shù)據(jù)應該與應用程序抽離出來矾兜, 最好形成單獨的配置文件。
多人開發(fā)項目中對于對象的處理遵循以下幾條原則:
1.如果不是自己創(chuàng)建的對象患久,不要修改他們椅寺, 包括:原生對象, DOM對象蒋失, BOM對象返帕, 類庫對象。
2.已經(jīng)存在的對象篙挽,(別人創(chuàng)建的對象)荆萤, 不覆蓋方法, 不新增方法铣卡, 不刪除方法链韭。