## 編風格程
作為前端開發人員,我相信每一個人都或多或少的用到原生的JavaScript,也正是因為用的人多,導致編碼風格也是多種多樣的,而不規范的編碼風格,不僅會導致一些奇怪的問題出現,而且不利于后期維護和提高執行效率。
基于本人也在開發中因為規范而出現各種問題,我特意的整理了一下JavaScript編碼規范(并不強制,只是推薦)。
**1、變量**
聲明變量必須加上`var`關鍵字,而且每個`var`只聲明一個變量,增加可讀寫。
推薦:
```
var name = 'TG';
var sex = 'man';
```
不推薦:
```
var name = 'TG', sex = 'man';
```
**2、常量**
常量的命名方式:用大寫字符,并用下劃線分隔。盡量不要使用const關鍵詞。
```
var MY_NAME = 'TG';
```
原因:IE并不支持const
**3、行尾分號**
總是使用分號,對于可用可不用的行尾分號,使用分號。
**4、嵌套函數**
可以使用,可以減少重復代碼,隱藏幫助函數等好處
**5、塊內函數聲明**
不要在塊內聲明一個函數
不推薦:
```
if(a){
function foo(){}
}
```
推薦:
```
if(a){
var foo = function(){}
}
```
**6、異常處理**
可以使用
```
try{}catch(e){}
throw exception
```
**7、eval()**
```
只用于解析序列化串
```
原因:eval()會讓程序執行的比較混亂。
**8、with(){}**
盡量少用。
**9、縮進**
用4個空格作為一縮進,而不是使用tab
原因:因為在不同瀏覽器上,tab的長度不一。
**10、字符串過長截取**
每行代碼不超過80個字符。如代碼過長,可使用+運算符拼接。
原因:過長會導致需要拖動橫向滾動條才看得到后面的代碼,降低開發效率,而且在復制黏貼時有可能錯漏。
**11、大括號**
區塊起首的大括號,不要另起一行
推薦:
```
if (true) {
}
```
不推薦:
```
if (true)
{
}
```
**12、構造函數**
對于構造函數,命名采用首字母大寫,其他函數一律小寫。
原因:可讀性,區分構造函數和普通函數
**13、注釋**
合理的加上注釋,有利于后期維護,提高可讀性。
**14、{}和[]**
使用{}代替new Object(),使用[]代替new Array()
**15、單引號(')**
盡量使用單引號('),只在JSON文件中使用雙引號。
**16、變量和函數聲明**
變量名和函數名在JavaScript機制下會發生聲明提升(也就是會提前到頂部聲明),所以建議變量和函數應該在使用前聲明。
**17、使用===和!==代替==和!=**
在JavaScript中,比較運算符進行計算時會進行強制轉換,==和!=會產生一些意想不到的結果,所以應該用“嚴格相等”===。
**18、換行**
在語句塊和下一個語句之間留一個空行,提高可讀性。
**19、命名**
構造函數或類名使用駝峰式命名
**20、嵌入規則**
JavaScript程序應該盡量放在.js的文件中。
**21、命名規則**
JavaScript 中的標識符的命名規則:
以字母、下劃線'_'或美元符號'$'開頭
允許名稱中包含字母,數字,下劃線'_'和美元符號'$'
區分大小寫
變量、屬性和函數名應該用駝峰式:
```
var isLogin = false;
```
私有函數用下劃線開頭:
```
function getFirstName(){
function _getName(){}
}
```
構造函數和類名應該首字母大寫。
對象中私有變量和函數以下劃線開頭。
**22、語句**
對于復合語句,if, for, while, do, switch, try … catch 等代碼體,函數定義的函數體,對象的定義等都需要放在花括號'{}'里面。
'{' 應在行末,標志代碼塊的開始。
'}' 應在一行開頭,標志代碼塊的結束,同時需要和'{'所在行的開始對齊,以表明一個完整的復合語句段。這樣可以極大地提高代碼的可閱讀性,控制邏輯能清晰地表現出來。
被包含的代碼段應該再縮進 4 個空格。
即使被包含的代碼段只有一句,也應該用花括號'{}'包含。盡管不用花括號代碼也不會錯,但如若需要增加語句的話,則較容易因花括號遺漏而引起的編譯錯誤或邏輯錯誤。
return語句在使用時也需注意,如果用表達式的執行作為返回值,應該把表達式和 return 放在同一行中,以免換行符被誤解析為語句的結束而引起返回錯誤。return 關鍵字后若沒有返回表達式,則返回 undefined。構造器的默認返回值為 this。
return a + b;
**23、方法鏈(調用鏈)**
如果使用方法鏈,應該每行只調用一個方法:
Animal
.getName()
.getFirstName()
**24、使用三元運算符**
三元運算符不應該用在一行,應該分割成多行替代。
推薦:
```
var foo = (a === b)
? 1
: 2;
```
不推薦:
```
var foo = (a === b) ?1 : 2;
```
**25、逗號**
對于數組和對象不要使用多余的“,”
不推薦:
```
var arr = [1,2,]
var person = {
name: 'TG'
};
```
原因:IE不兼容
**26、for-in**
對于數組,盡量避免使用for-in
- 前言
- JavaScript簡介
- 基本概念
- 語法
- 數據類型
- 運算符
- 表達式
- 語句
- 對象
- 數組
- 函數
- 引用類型(對象)
- Object對象
- Array對象
- Date對象
- RegExp對象
- 基本包裝類型(Boolean、Number、String)
- 單體內置對象(Global、Math)
- console對象
- DOM
- DOM-屬性和CSS
- BOM
- Event 事件
- 正則表達式
- JSON
- AJAX
- 表單和富文本編輯器
- 表單
- 富文本編輯器
- canvas
- 離線應用
- 客戶端存儲(Cookie、Storage、IndexedDB)
- HTML5 API
- Video/Audio
- Geolocation API
- requestAnimationFrame
- File API
- FullScreen API
- IndexedDB
- 檢測設備方向
- Blob
- vibrate
- Luminosity API
- WebRTC
- Page Visibility API
- Performance API
- Web Speech
- Notification
- 面向對象的程序設計
- 概述
- this關鍵字
- 原型鏈
- 作用域
- 常用API合集
- SVG
- 錯誤處理機制
- JavaScript開發技巧合集
- 編程風格
- 垃圾回收機制