JavaScript编码规范
- 二元运算符两侧必须有一个空格,一元运算符与操作对象之间不允许有空格。
- 用作代码块起始的左花括号
{
前必须有一个空格。 if / else / for / while / function / switch / do / try / catch / finally
关键字后,必须有一个空格。- 在对象创建时,属性中的
:
之后必须有空格,:
之前不允许有空格。这个有点像CSS中的属性和属性值之间的规范。 - 逗号和分号前不允许有空格。如果不位于行尾,逗号和分号后必须跟一个空格。
- 在函数调用、函数声明、括号表达式、属性访问、
if / for / while / switch / catch
等语句中,()
和[]
内紧贴括号部分不允许有空格。 - 单行声明的数组与对象,如果包含元素,
{}
和[]
内紧贴括号部分不允许包含空格。而且声明包含元素的数组与对象,只有当内部元素的形式较为简单时,才允许写在一行。元素复杂的情况,还是应该换行书写。示例:
var arr1 = [];
var arr2 = [1, 2, 3];
var obj1 = {};
var obj2 = {name: 'obj'};
var obj3 = {
name: 'obj',
age: 20,
sex: 1
};
- 每个独立语句结束后必须换行,每行不得超过 120 个字符。超长的不可分割的代码允许例外,比如复杂的正则表达式。长字符串不在例外之列。运算符处换行时,运算符必须在新行的行首。举例:
// good
if (user.isAuthenticated()
&& user.isInRole('admin')
&& user.hasAuthority('add-admin')
|| user.hasAuthority('delete-admin')
) {
// Code
}
var result = number1 + number2 + number3
+ number4 + number5;
- 函数定义结束不允许添加分号。
- IIFE 必须在函数表达式外添加
(
,非 IIFE 不得在函数表达式外添加(
。
解释:IIFE = Immediately-Invoked Function Expression. 额外的(
能够让代码在阅读的一开始就能判断函数是否立即被调用,进而明白接下来代码的用途。而不是一直拖到底部才恍然大悟。示例:
// good
var task = (function () {
// Code
return result;
})();
var func = function () {
};
// bad
var task = function () {
// Code
return result;
}();
var func = (function () {
});
- 常量、枚举的属性使用全部字母大写,单词间下划线分隔的命名方式。
- 变量、函数、函数的参数和命名空间使用驼峰命名方式。函数参数命名举例:
function hear(theBells) {
}
- 枚举变量、类使用 Pascal命名法。类命名举例:
function TextNode(options) {
}
- 由多个单词组成的缩写词,在命名中,根据当前命名法和出现的位置,所有字母的大小写与首字母的大小写保持一致。
- 类名使用名词,函数名使用动宾短语,
boolean
类型的变量使用is
或has
开头,Promise
对象用动宾短语的进行时表达。 - 单行注释必须独占一行。
//
后跟一个空格,缩进与下一行被注释说明的代码一致。多行注释要用多个单行注释替代,而不是/*...*/
。 - 文档化注释:为了便于代码阅读和自文档化,以下内容必须包含以
/**...*/
形式的块注释中。文件,namespace,类,函数或方法,类属性,事件,全局变量,常量,AMD 模块。文档注释前必须空一行。建议:自文档化的文档说明 what,而不是 how。 - 文件顶部必须包含文件注释,用
@file
标识文件说明。示例:
/**
* @file Describe the file
*/
- 函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识。参数和返回值注释必须包含类型信息,且不允许省略参数的说明。对
Object
中各项的描述, 必须使用@param
标识。
参考资料:
https://github.com/ecomfe/spec/blob/master/javascript-style-guide.md