Javascript安全程式設計規範
命名
1.原則——編碼格式UTF-8,根據功能為變數與方法命名(儘量不縮寫)
2.類——建構函式/類 使用駝峰命名法,且首字母大寫
3.方法——動詞、動賓結構,使用駝峰命名法,首字母小寫
例如:get + 非布林屬性名() is + 布林屬性名() set + 屬性名() has + 名詞/形容詞() 動詞() 動詞 + 賓語()
建議——類中的私有屬性和方法名,建議以下劃線開頭或結尾
例項:class Foo() {
this._bar = computerBar(); // 私有屬性
this.baz = computerBaz(); // 非私有屬性,可通過例項訪問
}
4.變數——駝峰風格、避免使用否定的布林變數名、縮寫詞全大/小寫、不要用保留字作鍵名或變數名、jQuery類變數以 $ 開頭
5.常量——全大寫單詞,以下劃線連線
註釋
複雜的判定條件封裝成名字清晰的方法,把判定結果作為返回值
好的註釋描述程式碼為什麼這麼寫,而不是描述程式碼功能
單行:// 塊: /* */ 檔案: /** */(包含用法,引數,返回值說明)
排版格式
1.縮排——只允許空格,使用Tab的話需要更改IDE配置自動將Tab轉化為空格
2.換行——以操作符/運運算元開頭
3.方法的引數儘量在一行——長引數名單獨一行
4.物件字面量屬性最多4個同行——大於4個的話每個引數獨佔一行
5.鏈式呼叫方法時一行最多4次——否則需要換行,把點放在前面
6.每行宣告一個變數,禁止連續賦值
7.使用基本型別的字面量而不是其封裝型別
8.禁止變數宣告覆蓋外層作用域的變數
方法
1.方法設計原則——單一職責原則、單一抽象層次
2.引數<=5個——引數過多可抽象為物件、不要把方法入參當作工作變數/臨時變數、預設引數放最後、實現對外API時應對外部傳入引數的合法性進行判斷
3.宣告與實現——使用宣告的方式定義方法而不是表示式、用到匿名函式時儘量使用箭頭函式
附: function Foo(){}即為宣告,有函式提升效果 var Foo = function (){}即為表示式,必須先定義後使用
字串
1.使用單引號(建立一個半酣HTML程式碼的字串就會知道原因:標籤屬性需要用雙引號括起來,會跟字串的雙引號產生配對錯亂問題)
2.使用模板字串實現字串拼接(``)
陣列
1.向陣列中新增元素時使用push替代直接賦值
2.不要在陣列上定義或使用非數字屬性(length除外)
例如: arr['str'] = 'string',陣列儘量以索引為鍵
3.遍歷時有限使用Arrary方法,如 forEach、map、filter、every...
4.不要在forEach裡進行元素的remove/add操作,會導致遍歷紊亂
5.使用擴充套件運運算元 ... 賦值陣列,避免淺拷貝問題
物件
1.物件字面量名稱使用識別符號
例如:var object = { id:1, name:'name1' } 不要使用下面這種字串做鍵 var obj = { 'str':'string' }
2.儘量在一個地方定義物件的所有屬性,即初始化定義物件時就把所有鍵都初始化,儘量不要後續新增屬性
3.物件字面量中使用方法簡寫、屬性簡寫
4.使用點來訪問物件屬性,只有屬性時動態的時候使用[ ],例如使用for-in遍歷物件時通過key訪問value
5.getter和setter應該承兌出現在物件中
6.禁止物件例項上直接使用Object.prototype的內建屬性
7.需要約束for-in
8.不要修改內建物件的原型或向原型新增方法
9.使用擴充套件運運算元 ... 進行物件賦值,防止淺拷貝問題
運算與表示式
1.if判定條件中,變數在先,字面量在後
2.使用 === 和 !===
3.使用簡寫的條件表示式,例如:當siValid時bool型時,寫if(isValid) 而不是 if(isValid===true)
4.