阅读 122

腾讯AlloyTeam:坚持既定代码规范! (上)

一、命名规则

A、项目与(JS,CSS,SCSS,HTML)文件命名

全部小写,下划线分割

B、目录命名

小写、下划线,有复数结构时要用复数

C、样式命名

  1. 类名(class) :小写,中划线
  2. id:驼峰式
  3. scss中的变量、函数、混合、placeholder:驼峰式

4、变量命名

  1. 标准变量:驼峰式命名(除了对象的属性外,注意是考虑到cgi返回的数据)
  2. 这些字符串都按这里写:“ID”,“URL”,“Android”,“IOS”
  3. 常亮:全大写,下划线连接
  4. 构造函数:大写第一个字母
  5. jquery对象:'$'开头命名

二、JavaScript

A、单行格式

  1. 缩进用soft/tab(4个空格)
  2. 单行长度不要超过80

B、分号(何时需要分号?)

  1. 变量生命
  2. 表达式
  3. return
  4. throw
  5. break
  6. continue
  7. do-while

C、空格,何时需要空格?

  1. 二元运算符前后 alert((1 && 3 || 0) && 4)
  2. 三元运算符前后 status == 1 ? True() : False()
  3. 代码块{
  4. 下列关键字前:else , while , catch , finally
  5. 下列关键字后:if , else , while , do , switch , case , try , catch , finally , with , return , typeof
  6. 单行注释‘//’后(若单行注释和代码同号,则//前也需要),多行注释*
  7. 对象的属性值前
  8. for循环,分好后留有一个空格,前置条件如果有多个,逗号后留一个空格
  9. 无论是函数声明还是函数表达式,{ 前面一定要有空格
  10. 函数的参数之间

D、何时不用空格?

  1. 对象的属性名后
  2. 前缀一元运算符后
  3. 后缀一元运算符后
  4. 函数调用括号前
  5. 无论是函数声明还是函数表达式前面不要空格
  6. 数组的[ ]前后
  7. 对象的{ }前后
  8. 运算符的( )前后

E、空行,何时用空行?

  1. 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
  2. 注释前(当注释在代码块的第一行时,则无需空行)
  3. 代码块后(在函数调用、数组、对象中则无需空行)
  4. 文件最后保留一个空行

F、何时要换行?

  1. 代码块'{'后,'}'
  2. 变量赋值后

G、何时不要换行?

  1. 关键字后:else,catch,finally
  2. 代码块{

H、单行注释

  1. 双斜线后,跟一个空格
  2. 缩进与下一行代码保持一致
  3. 位于一个代码行的末尾时:与代码间隔一个空格

I、多行缩进

  1. 最少三行,*后跟一个空格
  2. 建议在以下情况使用:
  • a)难于理解的代码段
  • b)可能存在错误的代码段
  • c)浏览器特殊的HACK代码
  • d)业务逻辑强相关的代码
    /*
    * one space after '*'
    */
复制代码

J、文档注释

  1. 各类标签 @param , @methid等参考:usejsdocJSDoc Guide
  2. 建议在以下情况使用:
  • 所有常亮
  • 所有函数
  • 所有类
/**
 * @func
 * @desc 一个带参数的函数
 * @param {string} a - 参数a
 * @param {number} b=1 - 参数b默认值为1
 * @param {string} c=1 - 参数c有两种支持的取值</br>1—表示x</br>2—表示xx
 * @param {object} d - 参数d为一个对象
 * @param {string} d.e - 参数d的e属性
 * @param {string} d.f - 参数d的f属性
 * @param {object[]} g - 参数g为一个对象数组
 * @param {string} g.h - 参数g数组中一项的h属性
 * @param {string} g.i - 参数g数组中一项的i属性
 * @param {string} [j] - 参数j是一个可选参数
 */
function foo(a, b, c, d, g, j) {
    ...
}
复制代码

K、引号

最外层:用单引号

L、变量声明

一个函数作用域中所有的变量声明尽量提到函数首部,用一个var声明,不允许出现两个连续的var声明

M、函数

  1. 函数声明还是函数表达式,都:前不要空格,{前有空格
  2. 函数调用括号前不需要空格
  3. 立即执行函数外必须包一层括号;、
  4. 不要给inline function命名
  5. 参数之间用分隔,注意!“逗号后面”有个空格

N、数组、对象

  1. 对象属性名:不用引号;
  2. 对象以缩进的形式写,不要写在一行
  3. 数组、对象最后不要有逗号

O、括号

下列关键字后面必须要有大括号。即使代码块的内容只有一行:

    if, else, for, while, do, switch, try, catch, finally, with 
复制代码

P、null

适用场景:

  1. 初始化一个将来可能被赋值为对象的变量
  2. 与已经初始化的变量作比较
  3. 作为一个参数为对象的函数的调用传参
  4. 作为一个返回对象函数的返回值

不适用场景:

  1. 不要用null来判断函数调用时有无传参
  2. 不要与未初始化的变量作比较

Q、undefined

  1. 不要直接使用undefined进行变量判断
  2. typeof和字符串‘undefined’对变量进行判断。

R、jshint

  1. ‘===’ , ‘!==’代替‘==’ , ‘!=’
  2. for-in里一定要有hasOwnProperty的判断;
  3. 不要在内置对象的原型上添加方法,如Array, Date
  4. 不要在内层作用域的代码里声明了变量,之后却访问到了外层作用域的同名变量;
  5. 变量不要先使用后声明;
  6. 不要在一句代码中单单使用构造函数,记得将其赋值给某个变量;
  7. 不要在同个作用域下声明同名变量;
  8. 不要在一些不需要的地方加括号,例:delete(a.b)
  9. 不要使用未声明的变量(全局变量需要加到.jshintrc文件的globals属性里面);
  10. 不要声明了变量却不使用;
  11. 不要在应该做比较的地方做赋值;
  12. debugger不要出现在提交的代码里;
  13. 数组中不要存在空元素;
  14. 不要在循环内部声明函数;
  15. 不要像这样使用构造函数,例:new function () { ... }, new Object

S、杂项

  1. 不要混用tabspace
  2. 不要在一处使用多个tabspace
  3. 换行符统一用‘LF’,即/n
  4. 对上下文this的引用只能使用_this, that, self其中一个来命名
  5. 行尾不要有空白字符
  6. switchfalling throughno default的情况一定要有注释特别说明
  7. 不允许有空的代码块。

至此~

想裁一段星河以赠你,好教你不逊色于人间烟火

原作者:AlloyTeam

来源: alloyteam.github.io/CodeGuide/

关注下面的标签,发现更多相似文章
评论