< 知识拓展:前端代码规范 >


👉 前言

前端开发在日新月异的发展下,各式各样开箱即用的工具组件的出现,给开发人员带来便捷与高效,也给开发人员带来挑战与思考。

在开发过程中,一千个人之中有一千个哈姆雷特,也出现了一千份截然不同的代码,也就是人们常说的 “ 千人千面 ”。使得代码后期的管理 以及 维护带来困难。在此基础下,不同的团队在自身的环境下具体问题具体分析后制定出自己的一套规范,由此,展开了规范化在于项目过程中的重要性讨论。

对于一个程序员来说,一个好的代码规范对个人代码质量的提升 以及 后期项目代码的管理 及 维护都有很大的好处!

就比如说,一个写代码乱七八糟的程序员 和 一个有着代码规范书写习惯的程序员,公司会选哪个? 一目了然…。
另一方面,是关于后期代码管理及维护方面, 一个公司的项目,总不可能一直是一个人独立完成,总有需要协助开发的内容,但是每个人都没有一个好的代码规范,在协助开发中,就好像一个英语不好的人,在和外国人沟通,效率低下,也不是不能听懂。所以说,代码规范很重要!

接下来,开始简述 “ 前端代码规范

👉 一、命名规范

  • 项目文件命名( js、css、scss、html ): 全部采用小写单词组成, 以下划线分隔。或者统一使用 “ 小驼峰 ” 写法。
下划线分隔:my_project_name
小驼峰:myProjectName
  • 目录结构命名 :规则和 “ 项目文件命名 ” 一致,但是有复数结构时,要采用复数命名法。
scripts, styles, images, data_models, components, views

👉 二、HTML代码规范

  • 重点 > 合理使用缩进使用soft tab( 2 / 4 个空格,在编译器中设置,使用空格代替Tab,);

以HBuilderX为例,设置 使用 空格替代Tab
缩进设置

  • 嵌套的节点按照结构,层层缩进,同时要注意 HTML的语义化
  • 在属性上,使用双引号,不要使用单引号;
  • 自定义属性名全小写,用中划线做分隔符;
  • 不要在自动闭合标签结尾处使用斜线( HTML5规范 指出他们是可选的);
  • 不要忽略可选的关闭标签,例:</li> 和 </body>
  • 当单个元素的属性过多时,需要适当换行,方便查看,在Vue中,建议 事件和属性分开一堆放,不要穿插,不方便阅读。

案例如下:

<el-table
	:data="tableData"
	:height="tableHeight"
	style="width: 100%"
	v-loading="tableLoading"
	tooltip-effect="light"
	element-loading-text="拼命加载中"
	element-loading-spinner="el-icon-loading"
	element-loading-background="rgba(0, 0, 0, 0.8)"
	@current-change="handleCurrentChange_table"
>
	<el-table-column
		type="index"
		label="序号"
		width="60"
		align="center"
	></el-table-column>
</el-table>

自闭合标签汇总如下

<meta>标签:设置页面元信息的
<base>:设置网页所有链接的相对目录(如根目录)的
<br>:换行
<hr>:水平线
<img>:图像
<input>:表单元素
<col>:在表格table中定义一个或多个列的属性
<frame>:定义框架的一个窗口(已遗弃)
<link>:定义文档与外部资源的关系的链接
<area>: 标签定义图像映射内部的区域(图像映射指的是带有可点击区域的图像)。
<param>:元素允许您为插入 XHTML 文档的对象规定 run-time 设置,也就是说,此标签可为包含它的
<object> 或者<applet> 标签提供参数。
<embed>: HTML5 中新增的,标签定义了一个容器,用来嵌入外部应用或者互动程序(插件)。
<keygen>:该对象提供了一个安全的方式来验证用户。
<source>: 标签为媒体元素(比如 和 )定义媒体资源。

自闭合标签
属性顺序应该按照特定的顺序出现以保证易读性。可以不按照下列标准,但是需要有规律,避免混杂交错。特别是使用Vue指令,事件、属性、绑定属性,一堆一堆放一起,避免穿插,降低可读性 。

  • class

  • id

  • name

  • data-*

  • src, for, type, href, value , max-length, max, min, pattern

  • placeholder, title, alt

  • aria-*, role

💡Tips: v-bind( : )、v-on( @ )一堆放,具体规范需要遵从 “ 易读性 ”、“ 复杂度 ”、 “ 标准化 ”、“ 语义化 ” 等。 不过要避免过度规范,过犹不及,还得在保证实用性的情况下规范代码,毕竟代码才是主体。还有按功能模块编写注释也很重要!

👉 三、CSS 代码规范

编写CSS代码时,缩进规范参照 HTML 缩进规范,如果加装了 “ 预编译器less、Scss ) ” 的话, 结构缩进也参照 HTML 的缩进规范。

> 空格规范

① 以下几种情况不需要空格:

  • 属性名后
  • 多个规则的分隔符’,'前
  • !important '!'后
  • 属性值中’(‘后和’)'前
  • 行末不要有多余的空格

② 以下几种情况需要空格:

  • 属性值前
  • 选择器 '>', '+', '~' 前后
  • { ’ 前
  • !important! ’ 前
  • @else 前后
  • 属性值中的 ', '后
  • 注释 ‘/’ 后和 '/’ 前

案例如下:

/* not good */
.element {
    color :red! important;
    background-color: rgba(0,0,0,.5);
}

/* good */
.element {
    color: red !important;
    background-color: rgba(0, 0, 0, .5);
}

/* not good */
.element ,
.dialog{
    ...
}

/* good */
.element,
.dialog {

}

/* not good */
.element>.dialog{
    ...
}

/* good */
.element > .dialog{
    ...
}

/* not good */
.element{
    ...
}

/* good */
.element {
    ...
}

> 空行 / 换行 规范

① 以下几种情况需要空行:

  • 文件最后保留一个空行
  • '}' 后最好跟一个空行,包括scss中嵌套的规则
  • 属性之间需要适当的空行,具体见属性声明顺序

② 以下几种情况不需要换行:

  • '{'

③ 以下几种情况需要换行:

  • '{' 后和 '}'
  • 每个属性独占一行
  • 多个规则的分隔符 ','
/* 空行 */
/* not good */
.element {
    ...
}
.dialog {
    color: red;
    &:after {
        ...
    }
}

/* good */
.element {
    ...
}

.dialog {
    color: red;

    &:after {
        ...
    }
}

/* 换行 */
/* not good */
.element
{color: red; background-color: black;}

/* good */
.element {
    color: red;
    background-color: black;
}

/* not good */
.element, .dialog {
    ...
}

/* good */
.element,
.dialog {
    ...
}

> 注释

  • 注释统一用’/* */‘(scss中也不要用’//'),具体参照右边的写法;

  • 缩进与下一行代码保持一致;

  • 可位于一个代码行的末尾,与代码间隔一个空格。

案例如下:



/* not good */
.element
{color: red; background-color: black;}

/* good */
.element {
    color: red;
    background-color: black;
}

/* not good */
.element, .dialog {
    ...
}

/* good */
.element,
.dialog {
    ...
}

> 命名规则

  • 类名使用小写字母,以中划线分隔
  • id 采用驼峰式命名
  • scss 中的变量、函数、混合、placeholder采用驼峰式命名

案例如下:

/* class */
.element-content {
    ...
}

/* id */
#myDialog {
    ...
}

/* 变量 */
$colorBlack: #000;

/* 函数 */
@function pxToRem($px) {
    ...
}

/* 混合 */
@mixin centerBlock {
    ...
}

/* placeholder */
%myDialog {
    ...
}

> 属性声明顺序

相关的属性声明按右边的顺序做分组处理,组之间需要有一个空行。如果对应属性有简写形式,在明确简写形式的属性值的情况下,一般建议简写!

👉 四、JavaScript 代码规范

> 缩进

JavaScript 代码缩进参照 HTML缩进规则,以 “ 简洁 ”、“ 易读 ” 为主。

> 单行长度

不要超过 80 ,但如果编辑器开启 word wrap 可以不考虑单行长度。该换行的地方换行,避免因为代码过长导致观看不便。

案例如下:

// True
setTimeout(() => {
	...
}, 1000);

// false
setTimeout(() => {...}, 1000);

> 分号

分号这种对于美观性影响不大的符号,在语法必须的情况下,不可省略(如: for(表达式1; 表达式2; 表达式3;))。关于规范,不同的公司有着不同的规范,有些公司建议做个” 无分号 “强者,有些建议必写,这个是可选的。

以下几种情况后需加分号:

  • 变量声明
  • 表达式
  • return
  • throw
  • break
  • continue
  • do-while
/* var declaration */
var x = 1;

/* expression statement */
x++;

/* do-while */
do {
    x++;
} while (x < 10);

> 空格、空行、换行

➡️ 以下几种情况不需要空格:

  • 对象的属性名后
  • 前缀一元运算符后
  • 后缀一元运算符前
  • 函数调用括号前
  • 无论是函数声明还是函数表达式,'(' 前不要空格
  • 数组的 '[' 后和 ']'
  • 对象的 '{' 后和 '}'
  • 运算符 '(' 后和 ')'

➡️ 以下几种情况需要空格:

  • 二元 / 三元运算符前后
  • 代码块 ' { '
  • 下列关键字前:else, while, catch, finally
  • 下列关键字后:if, else, for, while, do, switch, case, try, catch, finally, with, return, typeof
  • 单行注释 ' // ' 后(若单行注释和代码同行,则 ' // ' 前也需要),多行注释 '*'
    对象的属性值前
  • for循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
  • 无论是函数声明还是函数表达式,'{'前一定要有空格
  • 函数的参数之间
  • 单行 / 多行 注释,注释符合后都需要空格

➡️ 以下几种情况需要空行:

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

➡️ 以下几种情况不需要换行:

  • 下列关键字后:else, catch, finally
  • 代码块’{'前

➡️以下几种情况需要换行:

  • 代码块’{‘后和’}'前
  • 变量赋值后

换行的地方,行末必须有’,'或者运算符;

案例如下:

// not good
const fnName_1 = (list=[])=>{
	let personInfo={
		name :'xxx',
		age :20,
		sex: '男'
	}
	// 循环输出list内容
	for(let i=0;i<=list.length;i++){
		console.log(list[i]==='匿名'? list[i]: '***' )
	}
	return personInfo;
}

// good
const fnName_1 = ( list = [] ) => {
	let personInfo = {
		name: 'xxx',
		age: 20,
		sex: '男'
	}
	
	// 循环输出list内容
	for( let i = 0; i <= list.length; i++ ) {
		console.log(list[i] === '匿名' ? list[i] : '***' )
	}

	// 输出信息
	return personInfo;
}

> 方法参数注释

/**
 * @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) {
    ...
}

> 引号: 统一使用 单引号

// not good
var x = "test";

// good
var y = 'foo',
    z = '<div id="test"></div>';

> 变量命名

  • 标准变量采用小驼峰式命名,语法: thisNameText(除了对象的属性外,主要是考虑到cgi返回的数据)
  • 'ID' 在变量名中全大写
  • 'URL' 在变量名中全大写
  • 'Android' 在变量名中大写第一个字母
  • 'iOS' 在变量名中小写第一个,大写后两个字母
  • 常量全大写,用下划线连接
  • 构造函数,大写第一个字母
  • jquery 对象必须以 '$' 开头命名
var thisIsMyName;

var goodID;

var reportURL;

var AndroidVersion;

var iOSVersion;

var MAX_COUNT = 10;

function Person(name) {
    this.name = name;
}

// not good
var body = $('body');

// good
var $body = $('body');

>变量声明

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

function doSomethingWithItems(items) {
    // use one var
    var value = 10,
        result = value + 10,
        i,
        len;

    for (i = 0, len = items.length; i < len; i++) {
        result += 10;
    }
}

> 函数

  • 无论是函数声明还是函数表达式,'(' 前不要空格,但 '{' 前一定要有空格;

  • 函数调用括号前不需要空格;

  • 立即执行函数外必须包一层括号;

  • 不要给 inline function 命名;

  • 参数之间用 ', ' 分隔,注意逗号后有一个空格。

> 数组、对象

  • 对象属性名不需要加引号;

  • 对象以缩进的形式书写,不要写在一行;

  • 数组、对象最后不要有逗号。

// not good
let a = {
    'b': 1
};
let a = {b: 1};

var a = {
    b: 1,
    c: 2, // 最后一个不需要逗号
};

// good
let a = {
    b: 1,
    c: 2
};

> 括号

下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with。

// not good
if (condition)
    doSomething();
if (condition) doSomething();

// good
if (condition) {
    doSomething();
}

💬 小温有话说

内容大致就这样子啦,总得来说,代码规范这件事,主要要主要代码的 ” 简洁 “、” 有条理 “、” 易读性 “ 方面着手,避免过度规范,降低代码书写效率! 今天的内卷就到这里啦! 觉得有帮助的小伙伴,点点赞!支持一下吧

📃 参考文献

往期内容 💨

🔥 < 了解 HTTP 这一篇就够了 :什么是 HTTP ?HTTP 和 HTTPS 有什么区别 ? >

🔥 < 每日小技巧:Vue常用修饰符 >

🔥 < elementUi 中 树状侧边栏,机构单位 - 岗位 字典 >

🔥 < 在Vue中,为什么 v-if 和 v-for 不建议一起使用 ? >

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在delphi7中,如何用TXMLDocument这个类访问下面这个xml中的"商品名称"这个节点的值:<?xml version="1.0" encoding="gb2312"?> <inv> <fpzl>s</fpzl> <成品油>0</成品油> <getmw/> <CheckEWM/> <PriceKind>1</PriceKind> <autoxxb>0</autoxxb> <购方名称>重庆缙嘉嘉商贸有限公司</购方名称> <购方税号>91500117MA7KPJXP0Y</购方税号> <购方银行帐号>中国银行重庆合川支行113078682068</购方银行帐号> <购方地址电话>重庆市合川区草街拓展园区15723038760</购方地址电话> <税率>0</税率> <备注/> <开票人>张三</开票人> <复核人>周雯燕</复核人> <收款人>陈溢倩</收款人> <销方银行帐号>中国银行鄯善县新城东路支行107670942234</销方银行帐号> <销方地址电话>广州市番禺区456315896</销方地址电话> <合计金额>995575.22</合计金额> <合计税额>129424.78</合计税额> <销售单据编号>HS.GY.DBHS20230526-0025121</销售单据编号> <销方名称>航信培训企业</销方名称> <销方税号>440001999999179</销方税号> <原发票代码/> <原发票号码/> <通知单编号/> <电子邮箱/> <手机号/> <开票日期/> <红冲原因></红冲原因> <details> <detail> <商品编号/> <商品名称>金属硅鿃</商品名称> <规格型号/> <计量单位>吨</计量单位> <税收分类编码>1080208</税收分类编码> <数量>75</数量> <单价>15000</单价> <金额>1125000</金额> <税额>129424.78</税额> <优惠政策名称/> <税率>13</税率> <零税率标志/> </detail> </details> <清单标志>0</清单标志> </inv>
05-28

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术宅小温

你小小的鼓励,是我搬砖的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值