前端变量命名规范基础知识入门_规范新手入门

程序开发过程中变量命名不仅是一个头疼问题,也是一个对开发者综合素质的检验,它会直接影响到代码的最终交付质量、代码Review人员心智承受力。如何写出具有创造性、优雅性、易读性的高质量代码,需要开发者在实际工作中不断总结、提炼,在阅读他人代码时不断地吸收,并在一定的编码规范上形成自己的编码风格。在代码一道除了天资和经验更需要一份详实的参考来辅助,这正是本系列文

前端变量命名规范基础知识入门

程序开发过程中变量命名不仅是一个头疼问题,也是一个对开发者综合素质的检验,它会直接影响到代码的最终交付质量、代码Review人员心智承受力。如何写出具有创造性、优雅性、易读性的高质量代码,需要开发者在实际工作中不断总结、提炼,在阅读他人代码时不断地吸收,并在一定的编码规范上形成自己的编码风格。在代码一道除了天资和经验更需要一份详实的参考来辅助,这正是本系列文章的出发点所在。

前端变量命名规范基础知识入门_规范新手入门

变量的命名不局限于JavaScript代码中的属性、方法和对象,也包含了路由的命名,工程结构的命名,数据库表和字段的命名,样式中Class和ID选择器的命名,HTML元素的选择等。

命名规则

目前流行的经典命名规则有:驼峰命名法、匈牙利命名法、下划线命名法、帕斯卡命名法

相关命名的具体规则请另行查阅。前端主要涉及到驼峰命名法,React组件会用到帕斯卡命名法。

然后是变量命名规则:

  • 变量名首字母必须为字母(a-z A-Z),下划线(_),或者美元符号($)开始
  • 变量名只能是字母(a-z A-Z),数字(0-9),下划线(_)的组合,并且之间不能包含空格,数字不能放在变量名首位。
  • 变量名不能使用编程语言的保留字。比如在javascript中不能使用true, false, while, case, break保留字等等。

命名风格

这里给出一些在开发过程中约定成俗的通用规则,涉及JavaScript, Typescript, 框架组件, 样式及目录。在文章中将使用【强制】来表示必须严格遵守,【推荐】来表示建议,【参考】来给出多种命名方式的一种。

1. 【强制】在JavaScript中使用驼峰命名法来表示变量,不能以下划线或美元符号作为开始和结束。

// 反例
_name
__name
name_
$name
name$

2. 【强制】在代码中严禁使用拼音与中英文混合的方式,更不允许直接使用中文的方式。除了一些国际通用的中文名称,要视为英文外,其它禁止使用。

// 正例
taobao
tmall
shanghai
coupons

// 反例
yhq [优惠券]

3. 【强制】类名使用大写驼峰命名法来表示,Typescript中枚举值使用大写驼峰命名法表示。

// 正例
class User {}
enum Color {Red = 1, Green, Blue}

// 反例
class user {}

4. 【强制】常量名全部大写,单词间使用下划线隔开,力求表达完整清楚,不要嫌名字长。

// 正例
GOOGLE_MAP_TOKEN

// 反例
TOKEN

5. 【建议】Typescript中抽象类使用 Abstract 或 Base 开头;异常类使用 Exception 结尾。

abstract class BaseDepartment {}

6. 【建议】在TypeScript中,类型使用 Type 作后缀,接口使用 I 作为前缀。

type PropsType = {}
interface ILoginProps {}

7. 【建议】 采用有意义的命名,在项目中坚持使用一种变量命名方式。不要 usr 与 user 混用

// 正例
users
getUserByUid()

// 反例
registerUsr()
copyUserInfo()

8. 【建议】方法名必须准确表达该方法的行为,在多数情况下以动词开头。

// 正例
fetchCoupons()
updateToken()
createAccount()
generateUniqueId()

// 反例
getData()

9. 【建议】可以使用单词简写,但是只局限于常用词汇,注意不同词汇的简写有可能冲突。

// 正例
setProps() [props -> property]
selectCouponsDlg() [dlg -> dialog]
readPkg() [pkg -> package]
previewTpl [tpl -> template]

// 反例
vehicleDesc [desc -> description]
vehicleDesc [desc -> descending]
vehicleAesc [aesc -> aescending]
fetchUsr() [usr -> user]

10. 【建议】在Vue和Angular中,模板语法中所有组件名使用中线命名法,在React中使用大写驼峰命名法来表示。

// Vue
<el-button type="text" @click="toDetail">详情</el-button>
<custom-component a-prop="prop" />

// Angular
<nz-sider [nzWidth]="200" style="background:#fff"></nz-sider>

// React
<SelectPicture data={this.images} />

11. 【推荐】统一使用中线命名法来命名目录。

|-- page-header
|   |-- PageHeader.vue

12. 【参考】在Vue模板语法中组件属性使用连字符命名法,在Vue中使用JSX则属性使用驼峰命名法,并且文件文以”.jsx”为文件类型。

<Thumbnail
  withHeadPicture={true}
  data={this.selectedImages[0]}
  withDetail={this.enabledDetail}
/>

13. 【强制】在服务名上使用 Service 后缀

class UserService {}

14. 【建议】在Vue中组件文件名采用大写驼峰命名方式,React同样如此,在Angular中以使用点和横杠来分隔文件名,并且符号名后面追加约定的类型后缀。

// Vue
User.vue

// Angular
app.component.ts
hero-list.component.ts
validation.directive.ts
app.module.ts
user-profile.service.ts

// React
User.jsx

15. 【参考】在React中使用目录名称作为组件名,在目录内容直接使用index作为入口,在Vue中不可以,在Angular中可以将index作为模块的入口,当然也可以直接作为组件的入口,但这样和其整个命名风格有所背离。

// Vue
|-- user-info
|  |-- UserInfo.vue

// Angular
|-- user-info
|  |-- user-info.component.ts
|  |-- index.ts

// React
|-- user-info
|   |-- index.jsx

16. 【建议】在工程中文档使用全大写命名

README.md
CONTRIBUTORS.md
CHANGELOG.md

17. 【建议】在Vue中指令命名使用 filter 作为结束。所有引用命名使用 ref 作为后缀

formatCouponsFilter
inputRef
selectRef

18. 【强制】测试文件以 .spec 或者 .test 作为命名的一部分。

selectPicture.spec.js
pageHeader.test.js

19. 【建议】复数化变量名称,而不是命名中包含集合类型名称。

// 正例
hosts
users
validUsers
hostText
hostJson
portNumber

// 反例
hostList
userList
hostStr
intPort

20. 【建议】在 for 循环中使用 i, j, k 来作为索引,使用 n 表示数量/次数/限制,使用 e 表示异常, 使用 evt 表示事件对象, 使用 cb 表示回调函数。

for (let i = 0; i < 10; i++) {
  for (let j = 0; j < 10; j++) {
    for (let k = 0; k < 10; k++) {
      // do something
    }
  }
}

21. 【强制】在解构时使用 const 来声明。

const [ foo, bar ] = { foo: 1, bar: 2 }

22. 【建议】在样式中Class命名可以使用一些常用简写来减少长度。

hd -> head
hdr -> header
ft -> foot
ftr -> footer
pg -> page
btn -> button
txt -> text
el -> element
opt -> option
bd -> border
cl -> clearfix
p -> padding
m -> margin
l -> left
r -> right
t -> top
b -> bottom
x -> horizontal
y -> vertical
px -> padding-left, padding-right
py -> padding-top, padding-bottom
pl -> padding-left
m -> margin
dlg -> dialog
sel -> select
img -> image
lbl -> label
chk -> checkbox
tpl -> template
tbl -> table
hoz -> horizontal
vert -> vertical
ref -> reference
wiz -> wizard
oh -> overflow: hidden

23. 【建议】在命名时采用BEM的方式,并适当变化,具体参见后续文章。

.page-header__main
.dialog__content
.gallery-list--wrap
.thumbnail-image--info
.action__btn-group

24. 【建议】样式Class命名使用中线连接,ID命名采用下划线连接。Class可以同时采用中线和下划线,但要遵循一定的规则。

.thumbnail-item__image
#page_header

25. 【参考】样式Class采用组合方式,通过外层Class名来限制作用范围。

// 正例
<div class="page-header">
  <div class="page-header__wrap common"></div>
  <div class="page-header__wrap tab"></div>
</div>

// 反例
<div class="page-header">
  <div class="page-header__wrap page-header--common"></div>
  <div class="page-header__wrap page-header--tab"></div>
</div>
海计划公众号
(0)
上一篇 2020/03/29 01:45
下一篇 2020/03/29 01:45

您可能感兴趣的内容

  • Web安全测试检查单使用说明_安全入门基础知识

    大类细项标记备注上传功能绕过文件上传检查功能P1功能测试阶段覆盖上传文件大小和次数限制P1 注册功能注册请求是否安全传输P1功能测试阶段覆盖注册时密码复杂度是否后台检验P1功能测试阶段覆盖激活链接测试P1功能测试阶段覆盖重复注册P1 批量注册问题P1 登录功能登录请求是否安全传输P1功能测试阶段覆盖会话固定P1功能测试阶段覆盖关键Cookie是否HttpOn

    2020/04/03
  • Html5、Css3、ES6的新特性菜鸟知识_特性使用帮助

    Html5的新特性1.语义化标签有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重。语义化的HTML在没有CSS的情况下也能呈现较好的内容结构与代码结构方便其他设备的解析便于团队开发和维护2.表单新特性3.多媒体视频(video)和音频(audio)4.web存储sessionstorage:关闭浏览器清空数据,储存大

    2020/04/03
  • DoraCMS小白攻略_基于 vue + Node.js 的内容管理系统

    DoraCMS小白攻略 官方网址:https://gitee.com/doramart/DoraCMS 简介描述:基于 vue + Node.js 的内容管理系统 DoraCMS是…

    2020/03/11
  • rapid.js基础知识教程_类似ORM的接口和用于API请求的路由器

    rapid.js基础知识教程 官方网址:https://rapidjs.drewjbartlett.com GitHub:https://github.com/rapidjs/ra…

    2020/03/07
  • AlloyDesigner入门知识_网站前端开发效率工具

    AlloyDesigner教程视频 官方网址:http://alloyteam.github.io/AlloyDesigner/ 简介描述:网站前端开发效率工具 Bonsai.js…

    2020/03/06
  • 在静态页面中使用 Vue.js小白入门_静态入门基础知识

    不使用Node.js, NPM, Webpack 等, 在静态页中使用Vue.js. 包括路由, 单文件组件. 1. 创建index.htmlindex.html做为项目的首页, 主要用来定义页面框架, 加载必需的css和script.这里使用element-ui的导航菜单组件搭建了一个页面框架.需要注意的是, 标签要加上 :defaul

    2020/03/26
  • 对编程累觉不爱?学会这5招,让你重燃激情!入门知识_编程菜鸟教程网

    骚年,面对现实吧,谈恋爱虽然有趣,但是两个人也会有相看两厌的“疲惫期”; 编程虽然有趣,但每个月总有那么两天会让你精疲力竭、累觉不爱。这很正常,但就怕晾着不管。最终循环反复,周而复始,你会陷入这样尴尬的局面——短则几天,长则数周,忙着所有与编程无关的事。如果编程只是你的业余爱好,那还好。但如果你以编程维持生计,那么那些无所事事的日子就会变扼住你命运的手,让你

    2020/03/23
  • 你知道多少this,new,bind,call,apply?入门知识_new入门基础知识

    那么什么是this,new,bind,call,apply呢?这些你都用过吗?掌握这些内容都是基础中的基础了。如果你不了解,那还不赶快去复习复习,上网查阅资料啥的!通过call,apply,bind可以改变this的指向,this指向一般指向它的调用者,默认挂载在window对象下。es6中的箭头函数中,this指向创建者,并非调用者。const func

    2020/03/23
  • 递归算法的理解基础知识教程_递归基础知识教程

    递归:所谓递归,就是既有传递,又有回归,与其说是传递与回归,初学不如理解是一种 “循序递进”与“规律约束”。为什么这样说,因为递归算法相比较于循环在代码结构方面个人认为更加简洁清晰,清晰易懂,递归注重的是一种有序的规律,所以在每个程序开始之前,我们只要能找到一个使程序循序递进的规律;并且在整个过程都在用此规律进行传递,但是递归算法也有很大的缺点,会造成内存

    2020/03/24
  • Vue.js组件切换方式入门攻略_组件入门基础知识

    这里,我用一个注册登录两组件的切换实例来演示:切换方式一
    独秀不爱秀
    <a href="#" @click.prevent="flag = true

    2020/03/29
  • 可靠React组件设计的7个准则之SRP教程视频_组件使用教程

    我喜欢React组件式开发方式。你可以将复杂的用户界面分割为一个个组件,利用组件的可重用性和抽象的DOM操作。基于组件的开发是高效的:一个复杂的系统是由专门的、易于管理的组件构建的。然而,只有设计良好的组件才能确保组合和复用的好处。尽管应用程序很复杂,但为了满足最后期限和意外变化的需求,你必须不断地走在架构正确性的细线上。你必须将组件分离为专注于单个任务,并

    2020/03/29
  • Icon Gallery小白知识一个图标搜索引擎。快速搜索、免费下载各种小图标

    Icon Gallery基础入门 官方网址:http://icongal.com/ 简介描述:一个图标搜索引擎。快速搜索、免费下载各种小图标 Icon Gallery描述 Sear…

    2020/03/05
  • vue多页面项目使用全局Loading组件零基础入门_项目菜鸟指南

    多页面vue应用中,在请求接口之前统一加上Loading作为未请求到数据之前的过渡展示。由于多页面未使用vuex做状态管理,只在入口统一注册了bus,所以此例子使用eventbus做事件通信。在Loading.vue中,一个简单的公共loading组件这个loading组件用showLoading控制展示与否。<div class="lo

    2020/03/29
  • 组件化的概念/特性/优点,Vue组件的使用攻略教程_vue小白知识

    组件化的概念
    Web 中的组件其实就是页面组成的一部分,好比是电脑中的每一个元件(如硬盘、键盘、鼠标),它是一个具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行相互融合,变成一个完整的应用,页面就是有一个个类似这样的部分组成,比如导航、列表、弹窗、下拉菜单等。页面只不过是这些组件的容器,组件自由组合形成功能完善的界面,当不需要某个组件,或者想要替换

    2020/04/05
  • vuex小白常识_一个专门为 Vue.js 应用所设计的集中式状态管理架构

    vuex小白常识 官方网址:http://vuex.vuejs.org/ GitHub:https://github.com/vuejs/vuex 简介描述:一个专门为 Vue.j…

    2020/03/06
  • 深入JS对象属性小白基础_对象小白指南

    属性决定JS中对象的状态,本文章主要分析这些属性是如何工作的。JS几种不同的属性JS有三种不同的属性:数据属性,访问器属性和内部属性。1.1 数据属性(properties)对象的普通属性将字符串名称映射到值。例如,下面对象obj有一个数据属性,名称为 prop,对应的值为 123:var obj = {prop: 123
    };
    可以用以下方式读取属性的值:

    2020/03/26