javascript编码规范

由于所在团队内部目前缺少js这块的规范,于是我结合自己的开发经验以及参考书本和网上的资料总结出这套规范。

注意:“不好的写法”在语法上没有问题,不会报错,只是不推荐这么写而已

A.0编辑器

尽量统一使用sublime Text3作为编辑器,并设置统一的缩进,如下图:

 

A.1 缩进

每一行的层级由4个空格组成,避免使用制表符(Tab)进行缩进。

 

A.2 行的长度

每行长度不应该超过80个字符。如果一行多于80个字符,应当在一个运算符(逗号,加号等)后换行。下一行应当增加两级缩进(8个字符)。PS:多个参数时,第二个参数开始与前一个参数末尾的逗号隔一个空格

 

A.3 原始值

字符串应当始终使用双引号(避免使用单引)且保持一致。避免在字符串中使用斜线另起一行。

 

特殊值null除了下述情况下应当避免使用。

l  用来初始化一个变量,这个变量可能被赋值为一个对象;

l  用来和一个已经初试化的变量比较,这个变量可以是也可以不是一个对象;

l  当函数的参数期望是对象时,被用作参数传入;

l  当函数的返回值期望是对象时,被对象返回值传出。

例如:

避免使用特殊值undefined。判断一个变量是否定义应当使用typeof操作符。

 

 

A.4 运算符间距

二元运算符前后必须使用一个空格来保持表达式的整洁。操作符包括赋值运算符和逻辑运算符。

 

A.5 括号间距

当使用括号时,紧接左括号之后和紧接右括号之前不应该有空格。

 

A.6 对象直接量

对象直接量要使用如下格式。

l  起始左花括号应当同表达式保持同一行。

l  每一个属性的名值对应当保持一个缩进,第一个属性应当在左花括号之后另起一行。

l  每个属性的名值对应当使用不含引号的属性名,其后紧跟一个冒号(之前不含空格,之后留一个空格),而后是值。

l  倘若属性值是函数类型,函数体应当在属性名之下另起一行,而且其前后均应保留一个空行。

l  一组相关的属性前后可以插入空行以提升代码的可读性。

l  结束的右花括号应当独占一行,并添加分号

例如:

 

当对象字面量作为函数参数时,如果值是变量,起始花括号应当同函数名在同一行。所有其余先前列出的规则同样适用。

 

A.7 注释

频繁地使用注释有助于他人理解你的代码。如下情况应当使用注释。

l  代码晦涩难懂;

l  可能别误认为错误的代码;

l  必要但并不明显的针对特定浏览器的的代码;

l  对于对象、方法或者属性,生成文档是有必要的(使用恰当的文档注释)。

 

A.7.1 单行注释

单行注释应当用来说明一行代码或者一组相关的代码。单行注释可能有三种使用方式。

l  独占一行的注释,用来解释下一行代码;

l  在代码行的尾部的注释,用来解释它之前的代码;

l  多行,用来注释掉一个代码块。

这里有一些示例代码:

 

对于代码行尾单行注释的情况,应确保代码结尾同注释之间至少一个缩进

 

注释一个代码块时在连续多行使用单行注释是唯一可以接受的情况。多行注释不应当在这种情况下使用。

 

A.7.2 多行注释

多行注释要在代码需要更多文字去解释的时候使用。每个多行注释都至少有如下三行。

1.     首行仅仅包括/*注释开始。该行不应当有其他文字。

2.     接下来的行以*开头并保持左对齐。这些行可以有文字描述。

3.     最后一行以*/开头并同先前行保持对齐。也不应当有其他文字。

 

多行注释的首行应当保持同它描述代码的相同层次的缩进。后续的每行应当有同样层次的缩进并附加一个空格(为了适当保持*字符的对齐)。每一个多行代码之前应当预留一个空行。

 

A.8 变量声明

所有的变量在使用前都应当事先定义。变量定义应当放在函数开头,使用一个var表达每一个变量。除了首行,所有行都应当多一层缩进以使变量能够垂直方向对齐。变量定义时应当初始化,并且赋值操作符应当保持一致的缩进。初始化的变量应当在未初始化变量之前。

 

A.9 函数声明

函数应当在使用前提前定义。一个不是作为方法的函数(也就是说没有作为一个对象的属性)应当使用函数定义的格式。函数名和开始圆括号之间不要有空格。结束的圆括号和右边的花括号之间留一个空格。右侧的花括号应当同function关键字保持同一行。开始和结束括号之间不应该有空格。参数名之间应当在逗号之后保留一个空格。函数体应当保持一级缩进。

 

其他函数内部定义的函数应当在var语句后立即定义。

 

匿名函数可能作为方法赋值给对象,或者作为其他函数参数。function关键字同开始括号之间不应有空格。

立即执行的函数应当在函数调用的外层用圆括号包裹。

 

A.10 命名

变量和函数的命名仅限于数字字母字符,若变量用于存储jQuery对象,则在变量名的前面加上美元符$。变量名采用驼峰命名格式,首字母小写,每个单词首字母大写。变量名的第一个应当是名词以避免同函数混淆。不要再变量名中使用下划线。

 

函数的命名也采用驼峰命名的格式,与变量命名一直,第一个单词应当用动词来避免同变量混淆。函数名中不要使用下划线。

 

构造函数——通过new运算符创建的函数——也以驼峰格式命名并且首字母大写。构造函数名称以非动词开头,因为new代表着创建一个对象实例操作。

 

常量(值不会被改变的变量)的命名是所有字母都大写,不同单词之间用单个下划线隔开。

 

对象的属性同变量的命名规则相同。对象的方法同函数的命名规则相同。如果属性或者方法是私有的,在之前加上一个下划线。

 

A.11 严格模式

严格模式仅限在函数内容使用,千万不要在全局使用。

 

如果你期望在多个函数中使用严格模式而不需要多次声明“use strict”,可以使用立即执行函数。

 

 

A.12 赋值

当给变量赋值时,如果右侧是含有比较语句的表达式,需要用圆括号包裹

A.13 等号运算符

使用 === (严格相等) 和 !== (严格不相等) 代替 == 和 != 来避免弱类型转换的错误

 

A.14 三元操作符

三元操作符应当仅仅用在条件赋值语句中,而不是作为if语句的替代品。

 

A.15 语句

简单语句

每一行最多只包含一条语句。所有简单的语句都应该以分号(;)结束。

 

复合语句

l  括起来的语句应当较复合语句多缩进一个层级。

l  开始的大括号应当在复合语句所在行的末尾;结束的大括号应当独占一行且同复合语句的开始保持同样的缩进。

l  当语句是控制结构的一部分时,诸如if或者for语句,所有语句都需要用大括号括起来,也包括单个语句。

l  想if一样的语句开始的关键词,其后应该紧跟一个空格,起始大括号应当在空格之后

if语句应当是下面的格式。

 

不允许在if语句中省略{ }

 

for语句

for类型的语句应当是下面的格式。

 

 

for语句的初始化部分不要出现变量声明

当使用for-in语句时,记得使用hasOwnProperty()进行双重检查来过滤出对象的成员

 

while语句

while类的语句应该是下面的格式

 

do语句

do类语句应该是下面的格式

 

switch语句

switch下的每一个case都要保持一个缩进。除第一个之外包括default在内的每一个case都要在之前保持一个空行

每一组语句(除了default)都要以break、return、throw结尾,或者用一行注释表示跳过。

 

try语句

try类的语句应当格式如下