分号
每行结尾都补充分号,方便区分边界。
const appName = 'name';复制复制失败复制成功
空格
以下几种情况不需要空格:
- 对象的属性名后
 - 前缀一元运算符后
 - 后缀一元运算符前
 - 函数调用括号前
 - 无论是函数声明还是函数表达式,
(前不要空格 - 数组的 
[后和]前 - 对象的 
{后和}前 - 运算符 
(后和)前 
以下几种情况需要空格:
- 二元运算符前后
 - 三元运算符 
?:前后 - 代码块 
{前 - 下列关键字前: 
else,while,catch,finally - 下列关键字后: 
if,else,for,while,do,switch,case,try,catch,finally,with,return,typeof - 单行注释 
//后(若单行注释和代码同行,则//前也需要),多行注释*后 - 对象的属性值前
 for循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格- 无论是函数声明还是函数表达式,
{前一定要有空格 函数的参数之间
// not goodconst a = {b :1};// goodconst a = {b: 1};// not good++ x;y ++;z = x?1:2;// good++x;y++;z = x ? 1 : 2;// not goodconst a = [ 1, 2 ];// goodconst a = [1, 2];// not goodconst a = ( 1+2 )*3;// goodconst a = (1 + 2) * 3;// no space before '(', one space before '{', one space between function parametersconst doSomething = function(a, b, c) {// do something};// no space before '('doSomething(item);// not goodfor(i=0;i<6;i++){x++;}// goodfor (i = 0; i < 6; i++) {x++;}复制复制失败复制成功
引号
最外层统一使用单引号。
const name = 'name';复制复制失败复制成功
变量命名
标准变量和普通函数采用驼峰式命名
- 私有属性、变量和方法以下划线 _ 开头。
 - 常量全大写,用下划线连接
 - 构造函数和类采用 Pascal 命名法
 - 枚举变量 使用 Pascal 命名法,属性全大写,用下划线连接
 - ‘ID’ 在变量名中全大写
 - ‘URL’ 在变量名中全大写
 - ‘Android’ 在变量名中大写第一个字母
 - ‘iOS’ 在变量名中小写第一个,大写后两个字母
 jquery 对象必须以’$’开头命名
const thisIsMyName;const _privateProp = {};const goodID;const reportURL;const AndroidVersion;const iOSVersion;const MAX_COUNT = 10;function Person(name) {this.name = name;}class Person {}const EnumList = {READING: 1,READED: 2,APPLIED: 3,READY: 4};const $body = $('body');复制复制失败复制成功
命名语法
类名,使用名词。
- 函数名,使用动宾短语。
 - boolean 类型的变量使用 is 或 has 开头。
 Promise 对象用动宾短语的进行时表达。
class Engine {}function getStyle() {}const isReady = false;const hasMoreCommands = false;const loadingData = new Promise((resolve, reject) => {});复制复制失败复制成功
变量声明
使用 ES6 的
let和const声明,优先使用const声明const name = 'mikky'复制复制失败复制成功
函数
无论是函数声明还是函数表达式,’(‘前不要空格,但’{‘前一定要有空格;
- 函数调用括号前不需要空格;
 - 立即执行函数外必须包一层括号;
 - 不要给inline function命名;
 参数之间用’, ‘分隔,注意逗号后有一个空格。
// no space before '(', but one space before'{'const doSomething = function(item) {// do something};function doSomething(item) {// do something}// not gooddoSomething (item);// gooddoSomething(item);// requires parentheses around immediately invoked function expressions(function() {return 1;})();// not good[1, 2].forEach(function x() {// ...});// good[1, 2].forEach(function() {// ...});// not goodconst a = [1, 2, function a() {// ...}];// goodconst a = [1, 2, function() {// ...}];// use ', ' between function parametersconst doSomething = function(a, b, c) {// do something};复制复制失败复制成功
数组、对象
对象属性名不需要加引号;
- 对象以缩进的形式书写,不要写在一行;
 数组、对象最后不要有逗号。
// not goodconst a = {'b': 1};const a = {b: 1};const a = {b: 1,c: 2,};// goodconst a = {b: 1,c: 2};复制复制失败复制成功
括号
下列关键字后必须有大括号(即使代码块的内容只有一行):
if,else,for,while,do,switch,try,catch,finally,with。// not goodif (condition)doSomething();// goodif (condition) {doSomething();}复制复制失败复制成功
注释
As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。
As long as necessary(如有必要,尽量详尽):合理的注释、空行排版等,可以让代码更易阅读、更具美感单行注释
[强制] 必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。
多行注释
[建议] 避免使用 /…/ 这样的多行注释。有多行注释内容时,使用多个单行注释。
文档化注释
[强制] 为了便于代码阅读和自文档化,以下内容必须包含以
/**...*/形式的块注释中。
解释:文件
- namespace
 - 类
 - 函数或方法
 - 类属性
 - 事件
 - 全局变量
 - 常量
 - AMD 模块
 
[强制] 文档注释前必须空一行。
[建议] 自文档化的文档说明 what,而不是 how。
该部分推荐参考 百度 JavaScript 编码规范,此处仅对文件部分的注释规范做约定。
文件注释
文件注释可使用 file-header 插件来生成,基本格式为:
/** @Author: author name* @Date: 2019-08-14 14:03:30* @Last Modified by: caiyin* @Last Modified time: 2019-08-14 14:07:41* @Description:* file discription(en/zh)*/复制复制失败复制成功
类型定义
[强制] 类型定义都是以 { 开始, 以 } 结束。
解释:
常用类型如:{string}, {number}, {boolean}, {Object}, {Function}, {RegExp}, {Array}, {Date}。
类型不仅局限于内置的类型,也可以是自定义的类型。比如定义了一个类 Developer,就可以使用它来定义一个参数和返回值的类型。
[强制] 对于基本类型 {string}, {number}, {boolean},首字母必须小写。
| 类型定义 | 语法示例 | 解释 | 
|---|---|---|
| String | {string} | — | 
| Number | {number} | — | 
| Boolean | {boolean} | — | 
| Object | {Object} | — | 
| Function | {Function} | — | 
| RegExp | {RegExp} | — | 
| Array | {Array} | — | 
| Date | {Date} | — | 
| 单一类型集合 | {Array. | 
string 类型的数组 | 
| 多类型 | {(number|boolean)} | 可能是 number 类型, 也可能是 boolean 类型 | 
| 允许为null | {?number} | 可能是 number, 也可能是 null | 
| 不允许为null | {!Object} | Object 类型, 但不是 null | 
| Function类型 | {function(number, boolean)} | 函数, 形参类型 | 
| Function带返回值 | {function(number, boolean):string} | 函数, 形参, 返回值类型 | 
| Promise | Promise. | 
Promise,成功返回的数据类型,失败返回的错误类型 | 
| 参数可选 | @param {string=} name | 可选参数, =为类型后缀 | 
| 可变参数 | @param {…number} args | 变长参数, …为类型前缀 | 
| 任意类型 | {*} | 任意类型 | 
| 可选任意类型 | @param {*=} name | 可选参数,类型不限 | 
| 可变任意类型 | @param {…*} args | 变长参数,类型不限 | 
