Google JavaScript代碼風格指南

修正版本 2.28
原文:http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml

Aaron Whyte
Bob Jervis
Dan Pupius
Eric Arvidsson
Fritz Schneider
Robby Walker

每個風格點都有一個展開/收起按鈕以便你可以得到更多的信息:?. 你可以將全部展開或收起:

? 全部展開/全部收起
內容樹

背景

JavaScript是一門客戶端腳本語言,Google經常用它來曬優越,本文檔列出了一些在做JS項目時需要注意的地方。都是高富帥整理的,還望各位屌絲們有時間都好好看看多學學,別對這個世界太消極了!(譯者注:所謂的客戶端呢就是瀏覽器或本地軟件環境,市面上所有的瀏覽器都支持JS,JS發展到現在統一WEB端再進軍移動互聯網后,相信在一段時間內都是不可被輕易替代的語言,所以有興趣的同學們可以多關注一下)

JavaScript語言規范

變量(var)

?
每個變量聲明都要加上var關鍵字噢。

常量

?
常量命名用類似NAMES_LIKE_THIS這樣的形式。沒事干了可以用@const來標記它是常量,但永遠不要用const關鍵字來進行常量聲明。

分號

? 每一語句的結尾都要加上分號噢。

嵌套函數

? 可以使用,木有問題。

塊內函數聲明

? 呀咩嗲。

異常處理

?支持合理使用。

自定義異常

?支持合理使用。

標準特性

? 總是優越于非標準特性之上。

基本包裝類型

? 主動 new 基本包裝類型(Boolean/Number/String)的人兒永遠也成不了高富帥!

多級原型結構

?
不是怎么推薦使用。

方法定義

?
Foo.prototype.bar = function() { ... };

閉包

?
上古之大殺器,順則飛龍在天,濫則亢龍有悔。

eval()

?
只用于反序列化。(反序列化的意思是從字節流中重構對象,這里指的應該是JSON字符串重構成對象,或是執行服務器返回的JS語句)

with() {}

? 別用。

this

?
僅在構造函數,方法,閉包中去使用它。

for-in 循環

?
只在 object/map/hash 要遍歷鍵值的時候使用。

關聯數組

?
永遠不要用 Array 去做 map/hash/associative 要做的事情。

多行字符串字面量

? 不要!

Array和Object字面量

? 推薦使用。

修改內置對象的原型

? 別這樣做。

IE下的條件注釋

? 別用。

JavaScript代碼風格規范

命名

?

通常,使用類似于 functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis, 和 SYMBOLIC_CONSTANTS_LIKE_THIS 這樣的命名方式(駝峰式)

自定義 toString() 方法

?
應該總是成功調用,無副作用。

延遲初始化

? 可以。

明確作用域

?
始終需要明確。

代碼格式化

? 一兩句話說不明白,展開了詳細討論

括號

?
只在需要的時候使用。

字符串

?
單引號(')比雙引號(")更好。

可見性(私有和受保護的字段)

?
鼓勵使用JSDoc中的 @private 和 @protected 
進行標注。

JavaScript類型

?
強烈建議使用編譯器。

注釋

?
使用 JSDoc

內部類和枚舉

?內部類和枚舉的定義應和頂級類放在同一文件內。
只需要聲明頂級類。

編譯壓縮

? 推薦使用。

提示和技巧

?
JavaScript 習習更健康。

吐槽部分

堅持一致原則

如果你要編輯代碼,先花幾分鐘看看它的代碼風格,如果它這么做,那你也應該這么做。

風格統一了,就有了一個共同思維的環境,參與者就可以專注的看你要說什么,而不是先想你是在說哪星球的語言。 雖然我們在這里提出統一樣式規則,但就只是想讓大家都知曉并借鑒而對自己的風格進行修正。 當然,保持自己獨有的風格也是很重要的。balabala……

修正版本 2.28

譯者:chajn
新浪微博:@chajn
于 2012-05-18
那個苦逼的下午
特別感謝@教主 @三水清 @不曉得V給予的技術支持
捕鱼达人小游戏