一、命名规则
A、项目与(JS,CSS,SCSS,HTML)文件命名
全部小写,下划线分割
B、目录命名
小写、下划线,有复数结构时要用复数
C、样式命名
- 类名
(class):小写,中划线 id:驼峰式scss中的变量、函数、混合、placeholder:驼峰式
4、变量命名
- 标准变量:驼峰式命名(除了对象的属性外,注意是考虑到
cgi返回的数据) - 这些字符串都按这里写:
“ID”,“URL”,“Android”,“IOS” - 常亮:全大写,下划线连接
- 构造函数:大写第一个字母
- jquery对象:
'$'开头命名
二、JavaScript
A、单行格式
- 缩进用
soft/tab(4个空格) - 单行长度不要超过80
B、分号(何时需要分号?)
- 变量生命
- 表达式
returnthrowbreakcontinuedo-while
C、空格,何时需要空格?
- 二元运算符前后
alert((1 && 3 || 0) && 4) - 三元运算符前后
status == 1 ? True() : False() - 代码块
{前 - 下列关键字前:
else , while , catch , finally - 下列关键字后:
if , else , while , do , switch , case , try , catch , finally , with , return , typeof - 单行注释
‘//’后(若单行注释和代码同号,则//前也需要),多行注释*后 - 对象的属性值前
for循环,分好后留有一个空格,前置条件如果有多个,逗号后留一个空格- 无论是函数声明还是函数表达式,
{前面一定要有空格 - 函数的参数之间
D、何时不用空格?
- 对象的属性名后
- 前缀一元运算符后
- 后缀一元运算符后
- 函数调用括号前
- 无论是函数声明还是函数表达式
(前面不要空格 - 数组的
[ ]前后 - 对象的
{ }前后 - 运算符的
( )前后
E、空行,何时用空行?
- 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
- 注释前(当注释在代码块的第一行时,则无需空行)
- 代码块后(在函数调用、数组、对象中则无需空行)
- 文件最后保留一个空行
F、何时要换行?
- 代码块
'{'后,'}'前 - 变量赋值后
G、何时不要换行?
- 关键字后:
else,catch,finally - 代码块
{前
H、单行注释
- 双斜线后,跟一个空格
- 缩进与下一行代码保持一致
- 位于一个代码行的末尾时:与代码间隔一个空格
I、多行缩进
- 最少三行,
*后跟一个空格 - 建议在以下情况使用:
- a)难于理解的代码段
- b)可能存在错误的代码段
- c)浏览器特殊的HACK代码
- d)业务逻辑强相关的代码
/*
* one space after '*'
*/
J、文档注释
- 各类标签
@param , @methid等参考:usejsdoc和JSDoc Guide - 建议在以下情况使用:
- 所有常亮
- 所有函数
- 所有类
/**
* @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、函数
- 函数声明还是函数表达式,都:
(前不要空格,{前有空格 - 函数调用括号前不需要空格
- 立即执行函数外必须包一层括号;、
- 不要给
inline function命名 - 参数之间用
,分隔,注意!“逗号后面”有个空格
N、数组、对象
- 对象属性名:不用引号;
- 对象以缩进的形式写,不要写在一行
- 数组、对象最后不要有逗号
O、括号
下列关键字后面必须要有大括号。即使代码块的内容只有一行:
if, else, for, while, do, switch, try, catch, finally, with
P、null
适用场景:
- 初始化一个将来可能被赋值为对象的变量
- 与已经初始化的变量作比较
- 作为一个参数为对象的函数的调用传参
- 作为一个返回对象函数的返回值
不适用场景:
- 不要用
null来判断函数调用时有无传参 - 不要与未初始化的变量作比较
Q、undefined
- 不要直接使用
undefined进行变量判断 - 用
typeof和字符串‘undefined’对变量进行判断。
R、jshint
- 用
‘===’ , ‘!==’代替‘==’ , ‘!=’ for-in里一定要有hasOwnProperty的判断;- 不要在内置对象的原型上添加方法,如
Array, Date; - 不要在内层作用域的代码里声明了变量,之后却访问到了外层作用域的同名变量;
- 变量不要先使用后声明;
- 不要在一句代码中单单使用构造函数,记得将其赋值给某个变量;
- 不要在同个作用域下声明同名变量;
- 不要在一些不需要的地方加括号,例:
delete(a.b); - 不要使用未声明的变量(全局变量需要加到.jshintrc文件的globals属性里面);
- 不要声明了变量却不使用;
- 不要在应该做比较的地方做赋值;
debugger不要出现在提交的代码里;- 数组中不要存在空元素;
- 不要在循环内部声明函数;
- 不要像这样使用构造函数,例:
new function () { ... },new Object;
S、杂项
- 不要混用
tab和space - 不要在一处使用多个
tab或space; - 换行符统一用
‘LF’,即/n - 对上下文
this的引用只能使用_this, that, self其中一个来命名 - 行尾不要有空白字符
switch的falling through和no default的情况一定要有注释特别说明- 不允许有空的代码块。
至此~
想裁一段星河以赠你,好教你不逊色于人间烟火
原作者:AlloyTeam