1. 程式人生 > 實用技巧 >Javascript安全程式設計規範

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.