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给予的技术支持