前端开发?不存在的

成为一个合格的web 前端开发工程师要知道的小事情

CSS规范:

1,命名:

class应优先虑以这元素具体目的来进行命名,应尽量简短且富有含义。

统一采用小写英文字母、数字、“-” 的组合。其中不得包含汉字、空格和特殊字符。

不推荐

.demoimage {} /* "demo" 和 "image" 中间没加 "-" */

不推荐

.error_status {}

推荐

.n-sample {}

原则上,不建议缩写,除非一看就懂的缩写,如nav。

尽量避免使用id来控制样式。

2,选择器:

避免出现过多的祖先选择器,各浏览器会有性能差异,消耗在选择器的时间也不尽相同。

1,尽量最多控制在3级以内。

不推荐

ul.example {}

.example1 .example2 .example3 .example4 {}

推荐

.example {}

.example1,

.example2 {}

2,非必要的情况下不要使用元素标签名和ID或class进行组合

不推荐

ul#example {}

div.error {}

推荐

#example {}

.error {}

3,书写顺序:

同一声明下的属性在书写时,应按功能进行分组,并以 Formatting Model(布局方式、位置) > Box Model(尺寸) > Typographic(文本相关) > Visual(视觉效果) 的顺序书写,以提高代码的可读性。

解释:

Formatting Model 相关属性包括:position / top / right / bottom / left / float / display / overflow 等

Box Model 相关属性包括:border / margin / padding / width / height 等

Typographic 相关属性包括:font / line-height / text-align / word-wrap 等

Visual 相关属性包括:background / color / transition / list-style 等

另外,如果包含 content 属性,应放在最前面。

4,属性简写:

在可以使用缩写的情况下,尽量使用属性缩写。

推荐

.post {

font: 12px/1.5 arial, sans-serif;

}

不推荐

.post {

font-family: arial, sans-serif;

font-size: 12px;

line-height: 1.5;

}

使用 border / margin / padding 等缩写时,应注意隐含值对实际数值的影响,确实需要设置多个方向的值时才使用缩写。

border / margin / padding 等缩写会同时设置多个属性的值,容易覆盖不需要覆盖的设定。如某些方向需要继承其他声明的值,则应该分开设置。

5,0和单位:

省略“0”值后面的单位。不要在0值后面使用单位,除非有值。

不推荐

padding-bottom: 0px;

margin: 0em;

推荐

padding-bottom: 0;

margin: 0;

6,十六进制表示法:

在可能的情况下,使用3个字符的十六进制表示法。

颜色值允许这样表示,3个字符的十六进制表示法更简短。始终使用小写的十六进制数字。

不推荐

color: #FF33AA;

推荐

color: #f3a;

7,带前缀的属性:

当使用特定厂商的带有前缀的属性时,通过缩进的方式,让每个属性的值在垂直方向对齐,这样便于多行编辑。

.selector {

-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);

box-shadow: 0 1px 2px rgba(0,0,0,.15);

}

8,!important:

尽量不使用 !important 声明。当需要强制指定样式且不允许任何场景覆盖时,通过标签内联和 !important 定义样式。

CSS样式与文件命名参考表:

CSS样式命名说明

wrapper页面外围控制整体布局宽度container容器,用于最外层layout布局header页头部分

footer页脚部分、nav主导航、subnav二级导航、menu菜单、submenu子菜单、sidebar侧栏main页面、主体tag、标签msg 、message提示信息、tips小技巧、vote投票、friendlink友情连接、title标题、summary摘要、loginbar登录条、searchInput搜索输入框、hot热门热点、search搜索、search-output搜索输出和搜索结果相似、search-bar搜索条、search-results搜索结果copyright版权信息、branding商标logo网站LOGO标志、joinus加入我们、partner合作伙伴service服务、regsiter注册、arr/arrow箭头、guild指南、sitemap网站地图、list列表、homepage首页、subpage二级页面子页面、tool, toolbar工具条、drop下拉、dorpmenu下拉菜单、status状态、scroll滚动、.tab标签页、.left .right .center居左、中、右、news新闻、download下载、banner广告条(顶部广告条)、products产品、products-prices产品价格products-description产品描述、products-review产品评论、editor-review编辑评论、news-release最新产品、publisher生产商、screenshot缩略图、faqs常见问题、keyword关键词、blog博客、forum论坛

CSS文件命名说明base.css基本共用layout.css布局,版面master.css或style.css主要的module.css模块themes.css主题columns.css专栏font.css文字、字体form.css表单

JavaScript规范:

1,文件命名可读性强:

文件夹、文件的命名与命名空间应能代表代码功能,可读性强。

2,嵌入规则:

Javascript代码应该尽量放在.js格式的文件中,需要调用的时候在页面中以的形式包含进来。Javascript代码若不是该页面专用的,则应尽量避免在页面中直接编写Javascript代码。

3,全局命名空间无法与IIFE:

总是将代码包裹成一个IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域。这一举措可防止全局命名空间被污染。

IIFE 还可确保代码不会轻易被其它全局命名空间里的代码所修改(第三方库,window 引用,被覆盖的未定义的关键字等等)。

// 不推荐

var x = 10,

y = 100;

console.log(window.x + ' ' + window.y);

// 推荐

(function(log, w, undefined){

var x = 10,

y = 100;

console.log((w.x === undefined) + ' ' + (w.y === undefined));

}(window.console.log, window));

无论何时,想要创建一个新的封闭的定义域,那就用 IIFE。它不仅避免了干扰,也使得内存在执行完后立即释放。

所有脚本文件建议都从 IIFE 开始。

立即执行的函数表达式的执行括号应该写在外包括号内。虽然写在内还是写在外都是有效的,但写在内使得整个表达式看起来更像一个整体,因此推荐这么做。

不推荐

(function(){})();

推荐

(function(){}());

如果想引用全局变量或者是外层 IIFE 的变量,可以通过下列方式传参:

(function($, w, d){

$(function() {

w.alert(d.querySelectorAll('div').length);

});

}(jQuery, window, document));

4,引号:

统一使用单引号(‘’),不使用双引号(“”)。这在创建 HTML 字符串非常有好处:

var msg = 'This is some HTML';

5,变量生命:

总是使用 var 来声明变量。如不指定 var,变量将被隐式地声明为全局变量,这将对变量难以控制。如果没有声明,变量处于什么定义域就变得不清(可以是在 Document 或 Window 中,也可以很容易地进入本地定义域)。所以,请总是使用 var 来声明变量。驼峰命名法。

不推荐

x = 10;

y = 100;

推荐

var x = 10,

y = 100;

6,数组和对象字面量:

用数组和对象字面量来代替数组和对象构造器。数组构造器很容易让人在它的参数上犯错。

不推荐

var a1 = new Array(x1, x2, x3);

var a2 = new Array(x1, x2);

var a3 = new Array(x1);

var a4 = new Array();

正因如此,如果将代码传参从两个变为一个,那数组很有可能发生意料不到的长度变化。为避免此类怪异状况,请总是采用更多可读的数组字面量。

推荐

var a = [x1, x2, x3];

var a2 = [x1, x2];

var a3 = [x1];

var a4 = [];

对象构造器不会有类似的问题,但是为了可读性和统一性,我们应该使用对象字面量。

不推荐

var o = new Object();

var o2 = new Object();

o2.a = 0;

o2.b = 1;

o2.c = 2;

o2['strange key'] = 3;

推荐

var o = {};

var o2 = {

a: 0,

b: 1,

c: 2,

'strange key': 3

};

7,函数声明:

函数应在调用前进行声明,内部函数应在 var 声明内部变量的语句之后声明,可以清晰地表明内部变量和内部函数的作用域。

此外,函数名紧接左括号'('之间,而右括号')'和后面的'{'之间要有个空格,以清楚地显示函数名以其参数部分,和函数体的开始。若函数为匿名 / 无名函数,则 function 关键字和左括号'('之间要留空格,否则可能误认为该函数的函数名为 function。

var innerA = 1;

function outF () {

var innerA = 2;

function _inf () {

alert(‘valueA=’+innerA);

}

_inF();

}

outF ();

_inF();

8,语句块内的函数声明:

切勿在语句块内声明函数,在 ECMAScript 5 的严格模式下,这是不合法的。函数声明应该在定义域的顶层。但在语句块内可将函数申明转化为函数表达式赋值给变量。

不推荐

if (x) {

function foo() {}

}

推荐

if (x) {

var foo = function() {};

}

9,流程控制:

if、while、for、do语句的执行体总是用"{"和"}"括起来,即使在其结构体内只有一条语句

if (s==100) {

alert('shit!');

}

不要使用 switch。switch 在所有的编程语言中都是个非常错误的难以控制的语句,建议用 if else 来替换它。

10,操作符:

(1)三元条件判断(if 的快捷方法)

用三元操作符分配或返回语句。在比较简单的情况下使用,避免在复杂的情况下使用。没人愿意用 10 行三元操作符把自己的脑子绕晕。

不推荐

if(x === 10) {

return 'valid';

} else {

return 'invalid';

}

推荐

return x === 10 ? 'valid' : 'invalid';

11,注释:

(1)文件注释

文件注释要标明作者、文件版本、创建/修改时间、重大版本修改记录

函数描述

文件版本、创建或者修改时间、功能、作者

/**

* @file Image.js

* @description 功能详细描述

*/

函数或者类等都要添加头描述

/**

* 简述

*

* 功能详细描述

*

* @param arg1 参数1

* @param arg2 参数2,默认为0

* @return 看xxx是否成功

*/

function fooFunction (arg1, arg2) {

}

(2)操作注释

单行注释,写在代码上面

多行注释

/*

* 注释操作说明

*/

for( var i = 0; i < obj.lenght; i++) {

}​​​​

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

推荐阅读更多精彩内容

  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock阅读 3,370评论 2 36
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • 第一章 大蛤蟆 天渐渐黑了,我困在一个小黑屋里,不能出来,门是反锁的,只有一个小窗户能隐约看到外面的世界。在这里已...
    新一姬阅读 296评论 0 2
  • 你是否也有过这样的经历?睡觉之前有千思万绪,一觉醒来一切照旧。你痛恨自己的不坚持,却又无能为力。我们现在的时间都...
    左耳不闻阅读 211评论 1 2
  • Q:怎样回答女生"你喜欢我什么"? A:哈,女人总是这样可爱。但与此同时,也让男人比较无语。你让他怎么回答才满意?...
    飘雨桐V阅读 476评论 0 1