谷歌JS代碼規範
規範代碼緣由:代碼規範是爲了保持源代碼編寫模式一致,便於維護代碼,可讀性高。html
一、使用空格代替tab
規範隨後指出應該使用2個,而不是4個空格帶實現縮進。(除了每一行的終止符序列,ASCII水平空格符(0x20)是惟一一個能夠出如今源文件中任意位置的空格字符)node
二、不能省略分號
每一個語句必須以分號結尾。不容許依賴於JS自動添加分號的功能。分號是必須的,是不可省略的。es6
二、不推薦代碼水平對齊
對代碼進行水平對齊會在代碼中添加若干多餘的空格,這讓相鄰兩行的字符看上去處於一條垂直線上。數組
三、杜絕var
使用const或let來聲明全部局部變量。若是變量不須要被從新賦值,默認應該使用const。應該拒絕使用關鍵字var。ide
四、優先使用箭頭函數
箭頭函數提供了一種簡潔的語法,而且避免了一些關於this指向的問題。相比較與function關鍵字,開發者應該優先使用箭頭函數來聲明函數,尤爲是聲明嵌套函數。函數
五、使用模板字符串取代鏈接字符串
在處理多行字符串時,模板字符串比複雜的拼接字符串要表現的更出色。ui
六、不要使用續行符分割長字符串
在JS中,\也表明着續行符。(儘管ES5中容許這麼作,但若是在\後跟着某些結束空白符,這種行爲會致使一些錯誤,而這些錯誤在審閱代碼時很難注意)this
oogle推薦下面這樣的寫法,而Airbnb則認爲應該順其天然,不作特殊處理,該多長就多長spa
七、優先使用for...of
之前我認爲for...in適合遍歷Object,而for...of適合遍歷數組。由於我喜歡這種各司其職的使用方式。.net
儘管Google的規範與這種使用方式相沖突,但Google對for...of的偏心依然讓我以爲十分有趣。
八、不要使用eval語句
除非是在code loader中,不然不用使用eval或是Function(...string)結構。這個功能具備潛在的危險性,而且在CSP環境中沒法起做用。
九、常量的命名規範
常量命名應該使用全大寫格式,並用下劃線分割
若是你肯定必定以及確定一個變量值之後不會被修改,你能夠將它的名稱使用全大寫模式改寫,暗示這是一個常量,請不要修改它的值。
遵照這條規則時須要注意的一點是,若是這個常量是一個函數,那麼應該使用駝峯式命名法。
十、每次只聲明一個變量
每個變量聲明都應該只對應着一個變量。不該該出現像let a = 1,b = 2;這樣的語句。
十一、使用單引號
只容許使用單引號包裹普通字符串,禁止使用雙引號。若是字符串中包含單引號字符,應該使用模板字符串。
十二、暫時不要使用ES6 module
因爲ES6模塊的語義尚不徹底肯定,因此暫時不要使用,好比export和import關鍵字。一旦它們的相關規範制定完成,那麼請忽略這一條規則。
總結
以上代碼規範僅供參考,Airbnb的代碼規範比Google的代碼規範,選擇你腦海中時刻遵照的一份代碼規範便可。
Airbnb Javascript 代碼規範重要點總結es6
1.對全部的引用使用 const 而非 var。這能確保你沒法對引用重複賦值。
當須要變更引用時,使用let。
const和let都是塊級做用域。
2.建立對象的方式:
const item = {};
使用對象屬性的簡寫,且爲簡寫的屬性分組。
3.建立數組的方式:
const arr = [ ];
使用arr.push()去替代直接賦值。
使用拓展運算符去賦值數組: arrCopy = [...arr];
使用Array.from()把一個類數組對象轉換成數組:
const foo = document.querySelectorAll('.foo');
const nodes = Aarry.from(foo);
4.解構:
使用解構存取和使用多屬性對象:
function getFullName({ firstName, lastName }) { return `${firstName} ${lastName}`; }
對數組也使用解構賦值:
const arr = [1, 2, 3, 4]; const [first, second] = arr; // 等同於first = arr[0],second = arr[1]
返回多個值時使用對象解構:這樣不用在乎屬性的順序
function returnInput (input) { ... return { left, right, top, bottom }; } const { left, right } = processInput(input);
5.Strings
程序化生成字符串時,使用模板字符串代替字符串連接
function sayHi(name) { return `How are you, ${name}?`; }
6.函數
使用函數聲明代替函數表達式
function foo() { }
當即調用的函數表達式:
(()=> { console.log('Welcome to the Internet. Please follow me.'); })();
永遠不要在非函數代碼塊(if,while)中聲明一個函數,把那個函數賦給一個變量。
不要使用arguments,能夠選擇rest語法...替代。rest是一個真正的數組,且能明確你要傳入的參數
function cont(...args) { return args.join(''); }
直接給函數的參數指定默認值,不要使用一個變化的函數參數
function fn(opts = {}) {...}
7.構造器
老是使用class,避免直接操做prototype。
使用extends繼承。
方法能夠返回this來幫助鏈式調用。
8.模塊
老是使用模組(import/export)而非其餘非標模塊系統。
import { es6 } from './AirbnbStyleGuide'; export default es6;
不要使用通配符import以確保只有一個默認export
不要從import中直接export
9.迭代器
使用高階函數如map()/reduce()去替代for-of
const number = [1, 2, 3, 4, 5]; const sum = numbers.reduce((total, num) => total + num, 0); sum === 15; ...
10.屬性
使用 . 訪問對象的屬性。
當經過變量訪問屬性時使用中括號[]
11.變量
一直使用const來聲明變量以防止全局污染,且用const爲每個變量聲明。
將全部的const和let分組。
12.提高
使用let和const不會被提高,因此必須聲明在前面。
匿名函數的表達式的變量名會被提高可是函數內容不會
命名的函數表達式的變量名會被提高,可是函數名和函數內容不會
函數聲明的名稱和哈你數體都會被提高。
以上和js的解析機制有關。
13.優先使用 === 和 !== 而非 == / !=
條件表達式中:
對象被計算爲true
undefined / null 都爲false
數字除 +0 / -0 / NaN 外 都爲true
字符串除‘ ’外都爲true
14.代碼塊
使用大括號包裹全部的多行代碼塊,單行沒必要。
15.註釋
使用/**...*/做爲多行註釋
使用//做爲單行註釋,在評論對象上另起一行,且在註釋前插入空行
使用 // FIXME 標註問題
使用 // TODO 標註問題的解決方式
16.空格
在塊末和新語句前插入空行
17.類型轉換
字符串:不要使用 + ‘ ’
// => this.reviewScore = 9; const totalScore = String(this.reviewScore);
數字:使用parseInt,並帶上轉換類型的基數
布爾:
18.命名規則
使用帕斯卡式命名構造函數或類
不要使用下劃線結尾或開頭來命名屬性和方法
不要保存this的引用。使用箭頭函數或Function#bind
若是文件只輸出一個類,那你的文件名必須和類名徹底保持一致(帕斯卡式)
若是文件導出默認的函數,文件名與該函數名一致。(駝峯式)
19.存取器
屬性的存取函數不是必須的
使用getValue()和setValue('...')
若是屬性是布爾值,使用isVal() 或 hasVal()
以上總結是借用他人文章總結,若是做者介意,請聯繫我。能夠刪除。
原文出處:https://www.cnblogs.com/yaosusu/p/11317579.html