js.md 2.1 KB

以下规则适用于 js、ts文件。

语法

  • 统一使用单引号而不是双引号。
  • 避免使用直接 eval 函数。
  • 避免修改外部传入的对象。
  • 一个函数的长度控制在 50 行以内。
  • 类型检测优先使用 typeof。

命名

尽量简单语义化,明确它的用途,避免过度任意的简写。

普通命名采用小驼峰式命名。

Const 常量

  • 常量名采用大写字母,单词间用下划线分隔,例如 USER_NAMEUSER_AGE
  • 常量名应该是所有字母都大写的,例如 USER_NAMEUSER_AGE

Class 类

  • 类名采用驼峰命名法,首字母大写,例如 UserUserManager

Method 方法

  • 方法名采用驼峰命名法,首字母小写,例如 getUsergetUserInfo

命名需要符合语义化,可以采用加上动词前缀:

  • can 判断是否可执行某个动作
  • has 判断是否含有某个值
  • is 判断是否为某个值
  • get 获取某个值
  • set 设置某个值
  • ajax 请求相关

注释

单行注释

  • 位于代码上方。
  • 双斜线后,必须跟一个空格。
  • 缩进与下一行代码保持一致。

    if (condition) {
    // if you made it here, then all security checks passed
    allowed();
    }
    

多行注释

遵循单行注释,采用 jsdoc 风格。

/**
 * 一个带参数的函数
 * @func
 * @desc 一个带参数的函数,用于例子
 * @param {string} a - 参数a
 * @param {string} b - 参数b
 * @return {string} 结果
 */
function func(a, b) {
    //...
}

可读性优先

在一般场景下,代码的可读性、正确性优先,基本上不会遇到性能瓶颈。

// bad (albeit way faster)
const arr = [1, 2, 3, 4];
const len = arr.length;
var i = -1;
var result = [];
while (++i < len) {
  var n = arr[i];
  if (n % 2 > 0) continue;
  result.push(n * n);
}

// good
const arr = [1, 2, 3, 4];
const isEven = n => n % 2 == 0;
const square = n => n * n;

const result = arr.filter(isEven).map(square);

职责单一

一个类只做一件事,一个方法只做一件事,一个变量只做一件事。