前端规范

前言:

不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作。下面列出了前端开发规范

通用规范:

1、前端工具统一sublime text,配置信息统一,如下:

{

"caret_style": "phase",

"color_scheme": "Packages/User/SublimeLinter/Monokai (SL).tmTheme",

"default_line_ending": "unix",

"ensure_newline_at_eof_on_save": true,

"findreplace_small": true,

"font_size": 12,

"ignored_packages":

[

"Vintage"

],

"line_padding_bottom": 4,

"line_padding_top": 4,

"show_panel_on_build": false,

"tab_size": 4,

"tabs_medium": true,

"trim_trailing_white_space_on_save": false

}

2、空格还是Tab?我们强制使用4个占位符的Tab缩进,如果遇到不是tab缩进的,可以借助sublime text来转换成tab缩进,步骤如下:

ctrl+shift+p 输入convert to Tabs,敲回车就可以

3、统一采用UTF8编码

4、项目发布必须压缩、图片优化,提高页面访问速度

5、文件命名统一使用小写字母,js文件多个字母用'-'连接,页面多个字母用'_'连接

6、js、css能够通用化、组件化

es5:

1、一行代码长度尽量保持80列左右

2、变量

声明变量必须加上var关键字,推荐一个var同时声明多个变量,或者一组有逻辑关系的变量,避免一个变量一个 var,声明Array和Object使用[]和{},声明变量时将其初始化,更易读且性能更好。

变量不要使用关键字,对象key也不要使用关键字,在ie8下会报错

// bad

var obj = {

default: 1

};

3、命名

函数和变量命名使用驼峰式,命名尽量语义化,

// bad

var e = '',

l = 0;

// good

var element = '',

length = 0;

4、单例模式、模块化开发

5、命名空间

每个应该有自己的命名空间,并不会影响到其他模块

6、单双引号

强制使用单引号,性能好

7、语句结尾一定要加';'

8、JSON对象的最后一个字段、数组最后一个元素后面都不能加',',在IE8下会报错

9、尽量不要使用with/eval

10、对象延迟声明,对于页面初始化不需要的变量,延迟声明

11、所有语句都在声明变量之后

12、提前返回值,提升代码的性能

// bad

function fun(arg) {

var test;

if (arg) {

test = arg;

} else {

test = 'another'

}

return test;

}

// good

function fun(arg) {

if (arg) {

return arg;

} else {

return'another'

}

}

13、使用arg

var obj = {};

Object.keys({}).forEach(function(key) {

console.log(this); //obj

}, obj);

可以使用arg的Array.prototype.every、 Array.prototype.forEach、 Array.prototype.some、 Array.prototype.map、 Array.prototype.filter

14、this

15、条件优化

// bad

if(a !== "") {

}

// good

if(!a) {

}

16、规范定义JSON对象,补全双引号

// bad

var json = {

a: 1

};

// good

var json = {

"a":1

};

17、函数返回值应尽量明确

// bad

function fun() {

return ;

}

// good

function fun() {

return false;

}

18、减少js对dom操作次数

19、对于if/else等后面的语句即使只有一行代码也要在该行代码的首尾加上'{}'。对于switch语句要给出default:情况的处理逻辑

20、字符串拼接在少量(次数为个位数)的情况下可以使用'+', 大量的时候使用数组 join(), 或者尽可能采用模板引擎渲染

21、for循环遍历提前计算数组长度

22、变量类型转换

字符转数字:+'0' 1*'0' toString()

数字转字符:''+0 parseInt() parseFloat()

数字取整:Math.ceil() Math.floor() Math.round()

字符转布尔:!!'0'

23、变量比较使用===,除(==null)之外

24、私有属性、变量和方法名应该以下划线'_'开头

25、异常处理

try{} catch(e){}

26、false

"", 0, null, undefined, NaN, void 0

27、true

"''", '""', '0', 'null', 'undefined', {}, []

28、跨行语句以操作符结尾

var x = a ?

b :

c;

29、函数句柄命名是名词

30、注释

采用jsdoc方式注释,函数注释用/**/,函数内注释用//

禁止使用行末注释

css:

1、命名空间

wei- 组件的命名空间(取weiUI首)

pg- 页面的命名空间(取page)

2、class 命名遵循关注分离(不要考虑html结构,比如子元素选择器)、松耦合的原则,同时注重易于理解

3、模块化编写,语义化的模块名

4、命名规则

4.1、BEM命名法,.a > .a-b > .a-b-c

4.2、所有名称小写,符合w3c规范

4.3、类名和id,多个变量之间用中划线分割,{命名空间}-{模块名}-{状态描述}

4.4、所有变量只能使用名词

4.5、id、class命名语义化,不要使用 red、left 等表象的词命名,常见例子

容器: wed-container

列表: wed-list we-list-item

内容: wed-content

注意:class用来定义样式,如果javascript里用到放在最后顺序,id用来写交互,不需要特殊声明(J_ 废除)

5、为了实现代码复用,减少重复冗余,难免要把代码拆分在不同的 class 下面。我们要寻找一个平衡点,避免过细的拆分,减少不必要的 class

6、不建议过度嵌套选择符(semantic躺枪),选择符嵌套在必要的情况下一般不超过三层;选择符叠加一般不多于两个

7、css3不用加前缀,统一用autoprefixer生成,规则:

[

'ie >= 7',

'ie_mob >= 10',

'ff >= 30',

'chrome >= 34',

'safari >= 7',

'opera >= 23',

'ios >= 7',

'android >= 2.3',

'bb >= 10'

]

8、色值全部使用6位数

html:

1、语义化标签,webapp尽量多使用html5

<body>

<header></header>

<nav></nav>

<article>

     <section></section>

</article>

<aside>

</aside>

<footer></footer>

</body>

2、禁止使用非法标签属性

3、后台交互

data-api 接口

data-url 跳转链接

最多支持二级,比如

关注:data-api-follow

取消关注:data-api-unfollow

4、标签扁平化,禁止不必要的嵌套

5、标签属性,属性值使用中划线或者驼峰式,禁止使用下划线

6、html嵌套规则

  6.1块级元素与块级元素平级、内嵌元素与内嵌元素平级

  6.2块元素可以包含内联元素或某些块元素,但内联元素不能包含块元素,它只能包含其它的内联元素

  6.3有几个特殊的块级元素只能包含内嵌元素,不能再包含块级元素

  6.4块级元素不能放在标签p里面

  6.5li 标签可以包含 div 标签,因为li 和 div 标签都是装载内容的容器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 1 前言 HTML 作为描述网页结构的超文本标记语言,一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持...
    山豆山豆阅读 1,179评论 2 6
  • 最佳原则 坚持制定好的代码规范。无论团队人数多少,代码应该同出一门。如果你想要为这个规范做贡献或觉得有不合理的地方...
    Tiny_ae3d阅读 1,630评论 0 1
  • 1:通用规范 tab键用两个空格代替 因为在不同系统的编辑工具对tab解析不一样,windows下的tab键是占四...
    糖心m阅读 456评论 0 1
  • 通用规范 tab键用两个空格代替 因为在不同系统的编辑工具对tab解析不一样,windows下的tab键是占四个空...
    米塔塔阅读 414评论 0 7
  • 通用规范 tab键用两个空格代替 因为在不同系统的编辑工具对tab解析不一样,windows下的tab键是占四个空...
    戈薇薇阅读 468评论 0 1