以下规则适用于 js、ts文件。 ## 语法 * 统一使用单引号而不是双引号。 * 避免使用直接 eval 函数。 * 避免修改外部传入的对象。 * 一个函数的长度控制在 50 行以内。 * 类型检测优先使用 typeof。 ## 命名 尽量简单语义化,明确它的用途,避免过度任意的简写。 普通命名采用小驼峰式命名。 ### Const 常量 - 常量名采用大写字母,单词间用下划线分隔,例如 `USER_NAME`、`USER_AGE`。 - 常量名应该是所有字母都大写的,例如 `USER_NAME`、`USER_AGE`。 ### Class 类 - 类名采用驼峰命名法,首字母大写,例如 `User`、`UserManager`。 ### Method 方法 - 方法名采用驼峰命名法,首字母小写,例如 `getUser`、`getUserInfo`。 命名需要符合语义化,可以采用加上动词前缀: * `can` 判断是否可执行某个动作 * `has` 判断是否含有某个值 * `is` 判断是否为某个值 * `get` 获取某个值 * `set` 设置某个值 * `ajax` 请求相关 ## 注释 ### 单行注释 * 位于代码上方。 * 双斜线后,必须跟一个空格。 * 缩进与下一行代码保持一致。 ```js if (condition) { // if you made it here, then all security checks passed allowed(); } ``` ### 多行注释 遵循单行注释,采用 `jsdoc` 风格。 ```js /** * 一个带参数的函数 * @func * @desc 一个带参数的函数,用于例子 * @param {string} a - 参数a * @param {string} b - 参数b * @return {string} 结果 */ function func(a, b) { //... } ``` ## 可读性优先 在一般场景下,代码的可读性、正确性优先,基本上不会遇到性能瓶颈。 ```js // 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); ``` ## 职责单一 一个类只做一件事,一个方法只做一件事,一个变量只做一件事。