分号

每行结尾都补充分号,方便区分边界。

  1. const appName = 'name';复制复制失败复制成功

空格

以下几种情况不需要空格:

  • 对象的属性名后
  • 前缀一元运算符后
  • 后缀一元运算符前
  • 函数调用括号前
  • 无论是函数声明还是函数表达式,( 前不要空格
  • 数组的 [ 后和 ]
  • 对象的 { 后和 }
  • 运算符 ( 后和 )

以下几种情况需要空格:

  • 二元运算符前后
  • 三元运算符 ?: 前后
  • 代码块 {
  • 下列关键字前: else, while, catch, finally
  • 下列关键字后: if, else, for, while, do, switch, case, try, catch, finally, with, return, typeof
  • 单行注释 // 后(若单行注释和代码同行,则 // 前也需要),多行注释 *
  • 对象的属性值前
  • for 循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
  • 无论是函数声明还是函数表达式,{ 前一定要有空格
  • 函数的参数之间

    1. // not good
    2. const a = {
    3. b :1
    4. };
    5. // good
    6. const a = {
    7. b: 1
    8. };
    9. // not good
    10. ++ x;
    11. y ++;
    12. z = x?1:2;
    13. // good
    14. ++x;
    15. y++;
    16. z = x ? 1 : 2;
    17. // not good
    18. const a = [ 1, 2 ];
    19. // good
    20. const a = [1, 2];
    21. // not good
    22. const a = ( 1+2 )*3;
    23. // good
    24. const a = (1 + 2) * 3;
    25. // no space before '(', one space before '{', one space between function parameters
    26. const doSomething = function(a, b, c) {
    27. // do something
    28. };
    29. // no space before '('
    30. doSomething(item);
    31. // not good
    32. for(i=0;i<6;i++){
    33. x++;
    34. }
    35. // good
    36. for (i = 0; i < 6; i++) {
    37. x++;
    38. }复制复制失败复制成功

    引号

    最外层统一使用单引号。

    1. const name = 'name';复制复制失败复制成功

    变量命名

  • 标准变量和普通函数采用驼峰式命名

  • 私有属性、变量和方法以下划线 _ 开头。
  • 常量全大写,用下划线连接
  • 构造函数和类采用 Pascal 命名法
  • 枚举变量 使用 Pascal 命名法,属性全大写,用下划线连接
  • ‘ID’ 在变量名中全大写
  • ‘URL’ 在变量名中全大写
  • ‘Android’ 在变量名中大写第一个字母
  • ‘iOS’ 在变量名中小写第一个,大写后两个字母
  • jquery 对象必须以’$’开头命名

    1. const thisIsMyName;
    2. const _privateProp = {};
    3. const goodID;
    4. const reportURL;
    5. const AndroidVersion;
    6. const iOSVersion;
    7. const MAX_COUNT = 10;
    8. function Person(name) {
    9. this.name = name;
    10. }
    11. class Person {}
    12. const EnumList = {
    13. READING: 1,
    14. READED: 2,
    15. APPLIED: 3,
    16. READY: 4
    17. };
    18. const $body = $('body');复制复制失败复制成功

    命名语法

  • 类名,使用名词。

  • 函数名,使用动宾短语。
  • boolean 类型的变量使用 is 或 has 开头。
  • Promise 对象用动宾短语的进行时表达。

    1. class Engine {}
    2. function getStyle() {}
    3. const isReady = false;
    4. const hasMoreCommands = false;
    5. const loadingData = new Promise((resolve, reject) => {});复制复制失败复制成功

    变量声明

    使用 ES6 的 letconst 声明,优先使用 const 声明

    1. const name = 'mikky'复制复制失败复制成功

    函数

  • 无论是函数声明还是函数表达式,’(‘前不要空格,但’{‘前一定要有空格;

  • 函数调用括号前不需要空格;
  • 立即执行函数外必须包一层括号;
  • 不要给inline function命名;
  • 参数之间用’, ‘分隔,注意逗号后有一个空格。

    1. // no space before '(', but one space before'{'
    2. const doSomething = function(item) {
    3. // do something
    4. };
    5. function doSomething(item) {
    6. // do something
    7. }
    8. // not good
    9. doSomething (item);
    10. // good
    11. doSomething(item);
    12. // requires parentheses around immediately invoked function expressions
    13. (function() {
    14. return 1;
    15. })();
    16. // not good
    17. [1, 2].forEach(function x() {
    18. // ...
    19. });
    20. // good
    21. [1, 2].forEach(function() {
    22. // ...
    23. });
    24. // not good
    25. const a = [1, 2, function a() {
    26. // ...
    27. }];
    28. // good
    29. const a = [1, 2, function() {
    30. // ...
    31. }];
    32. // use ', ' between function parameters
    33. const doSomething = function(a, b, c) {
    34. // do something
    35. };复制复制失败复制成功

    数组、对象

  • 对象属性名不需要加引号;

  • 对象以缩进的形式书写,不要写在一行;
  • 数组、对象最后不要有逗号。

    1. // not good
    2. const a = {
    3. 'b': 1
    4. };
    5. const a = {b: 1};
    6. const a = {
    7. b: 1,
    8. c: 2,
    9. };
    10. // good
    11. const a = {
    12. b: 1,
    13. c: 2
    14. };复制复制失败复制成功

    括号

    下列关键字后必须有大括号(即使代码块的内容只有一行): if, else, for, while, do, switch, try, catch, finally, with。

    1. // not good
    2. if (condition)
    3. doSomething();
    4. // good
    5. if (condition) {
    6. doSomething();
    7. }复制复制失败复制成功

    注释

    As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。
    As long as necessary(如有必要,尽量详尽):合理的注释、空行排版等,可以让代码更易阅读、更具美感

    单行注释

    [强制] 必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。

    多行注释

    [建议] 避免使用 // 这样的多行注释。有多行注释内容时,使用多个单行注释。

    文档化注释

    [强制] 为了便于代码阅读和自文档化,以下内容必须包含以 /**...*/ 形式的块注释中。
    解释:

  • 文件

  • namespace
  • 函数或方法
  • 类属性
  • 事件
  • 全局变量
  • 常量
  • AMD 模块

[强制] 文档注释前必须空一行。
[建议] 自文档化的文档说明 what,而不是 how。

该部分推荐参考 百度 JavaScript 编码规范,此处仅对文件部分的注释规范做约定。

文件注释

文件注释可使用 file-header 插件来生成,基本格式为:

  1. /*
  2. * @Author: author name
  3. * @Date: 2019-08-14 14:03:30
  4. * @Last Modified by: caiyin
  5. * @Last Modified time: 2019-08-14 14:07:41
  6. * @Description:
  7. * file discription(en/zh)
  8. */复制复制失败复制成功

类型定义

[强制] 类型定义都是以 { 开始, 以 } 结束。
解释:
常用类型如:{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 变长参数,类型不限