前端开发规范
HTML 规范
HTML 类型
推荐使用 HTML5 的文档类型申明: (建议使用 text/html 格式的 HTML。避免使用 XHTML。XHTML 以及它的属性,比如 application/xhtml+xml 在浏览器中的应用支持与优化空间都十分有限)。
规定字符编码;
IE 兼容模式;
规定字符编码;
doctype 大写;
正例:
1 |
|
缩进
缩进使用 2 个空格;
嵌套的节点应该缩进;
分块注释
在每一个块状元素,列表元素和表格元素后,加上一对 HTML 注释。
<!-- 英文 中文 start >
<!-- 英文 中文 end >
正例:
1 | <body> |
语义化标签
HTML5 中新增很多语义化标签,所以优先使用语义化标签,避免一个页面都是 div 或者 p 标签。
正例
1 | <header></header> |
反例
1 | <div> |
引号
使用双引号(" ") 而不是单引号(’ ') 。
正例: <div class="news-div"></div>
反例: <div class='news-div'></div>
CSS 规范
命名
类名使用小写字母,以中划线分隔;
id 采用驼峰式命名;
scss 中的变量、函数、混合、placeholder 采用驼峰式命名;
id 和 class 的名称总是使用可以反应元素目的和用途的名称,或其他通用的名称,代替表象和晦涩难懂的名称;
不推荐:
1 | .fw-800 { |
推荐:
1 | .heavy { |
选择器
css 选择器中避免使用标签名,总是考虑直接子选择器:
不推荐:
1 | .content .title { |
推荐:
1 | .content > .title { |
尽量使用缩写属性
不推荐:
1 | border-top-style: none; |
推荐:
1 | border-top: 0; |
每个选择器及属性独占一行
不推荐:
1 | button, span { |
推荐:
1 | button, |
省略 0 后面的单位
不推荐:
1 | div{ |
推荐:
1 | div{ |
避免使用 ID 选择器
避免使用 ID 选择器及全局标签选择器防止污染全局样式。
不推荐:
1 | #header{ |
推荐:
1 | .header{ |
LESS 规范
代码组织
将公共 less 文件放置在 style/less/common 文件夹:
color.less, common.less按以下顺序组织:
1 | // 变量声明 |
避免嵌套层级过多
将嵌套深度限制在 3 级,避免大量的嵌套规则:
不推荐:
1 | .main { |
推荐:
1 | .main-title { |
Javascript 规范
命名
采用小写驼峰命名 lowerCamelCase,代码中的命名均不能以下划线,也不能以下划线或美元符号结束:
反例: _name / name_ / name$
方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式:
正例: localValue / getHttpMessage() / inputUserId
其中 method 方法命名必须是 动词 或者 动词+名词 形式:
正例:saveShopCarData /openShopCarInfoDialog
反例:save / open / show / go
推荐,增、删、改、查、详情统一使用如下 5 个单词
1 | add / delete / update / get / detail |
函数方法常用的动词:
1 | get 获取/set 设置, |
常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长:
正例: MAX_STOCK_COUNT
反例: MAX_COUNT
代码格式
使用 2 个空格进行缩进:
正例:
1 | if (x < y) { |
不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。任何情形,没有必要插入多个空行进行隔开。
字符串
统一使用单引号(‘),不使用双引号(“)。这在创建 HTML 字符串非常有好处:
正例:
1 | let str = 'foo'; |
反例:
1 | let str = 'foo'; |
对象声明
使用字面值创建对象:
正例: let user = {};
反例: let user = new Object();
使用字面量来代替对象构造器:
正例:
1 | var user = { |
反例:
1 | var user = new Object(); |
使用 ES6,7
必须优先使用 ES6,7 中新增的语法糖和函数。这将简化你的程序,并让你的代码更加灵活和可复用,比如箭头函数、await/async , 解构, let , for…of 等等。
括号
下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with。
正例:
1 | if (condition) { |
反例:
1 | if (condition) doSomething(); |
undefined 判断
永远不要直接使用 undefined 进行变量判断;使用 typeof 和字符串 ‘undefined’ 对变量进行判断。
正例:
1 | if (typeof person === 'undefined') { |
反例:
1 | if (person === undefined) { |
条件判断和循环最多三层
条件判断能使用三目运算符和逻辑运算符解决的,就不要使用条件判断,但是谨记不要写太长的三目运算符。如果超过 3 层请抽成函数,并写清楚注释。
this 的转换命名
对上下文 this 的引用只能使用 ‘self’ 来命名。
慎用 console.log
因 console.log 大量使用会有性能问题,所以在非 webpack 项目中谨慎使用 console.log 功能。





