易读、易复用、易重构的 JavaScript 代码规范

1.变量命名规范有意义

Bad:

const yyyymmdstr = moment().format("YYYY/MM/DD");
Good: const currentDate = moment().format("YYYY/MM/DD");

2. 给变量定义名字

Bad:

// What the heck is 86400000 for?
setTimeout(blastOff, 86400000);
Good: // Declare them as capitalized named constants.
const MILLISECONDS_IN_A_DAY = 86_400_000; setTimeout(blastOff, MILLISECONDS_IN_A_DAY);

3.函数的变量定义初始值

Bad:

function createMicrobrewery(name) {
const breweryName = name || "Hipster Brew Co.";
// ...
}
Good: function createMicrobrewery(name = "Hipster Brew Co.") {
// ...
}

4.函数的形参过多时候,用对象代替多个参数

Bad:

function createMenu(title, body, buttonText, cancellable) {
// ...
} createMenu("Foo", "Bar", "Baz", true);
Good: function createMenu({ title, body, buttonText, cancellable }) {
// ...
} createMenu({
title: "Foo",
body: "Bar",
buttonText: "Baz",
cancellable: true
});

5.函数应该只做一件事情

Bad:

function emailClients(clients) {
clients.forEach(client => {
const clientRecord = database.lookup(client);
if (clientRecord.isActive()) {
email(client);
}
});
}
Good: function emailActiveClients(clients) {
clients.filter(isActiveClient).forEach(email);
} function isActiveClient(client) {
const clientRecord = database.lookup(client);
return clientRecord.isActive();
}

6.函数名称应该说明其作用

Bad:

function addToDate(date, month) {
// ...
} const date = new Date(); // It's hard to tell from the function name what is added
addToDate(date, 1);
Good: function addMonthToDate(month, date) {
// ...
} const date = new Date();
addMonthToDate(1, date)

7.使用Object.assign拷贝对象

Good:

const menuConfig = {
title: "Order",
// User did not include 'body' key
buttonText: "Send",
cancellable: true
}; function createMenu(config) {
config = Object.assign(
{
title: "Foo",
body: "Bar",
buttonText: "Baz",
cancellable: true
},
config
); // config now equals: {title: "Order", body: "Bar", buttonText: "Send", cancellable: true}
// ...
} createMenu(menuConfig);

8.开闭原则

对扩展开放,对修改关闭;

面向对象开发

9.函数的继承

class Animal {
constructor(age) {
this.age = age;
} move() {
/* ... */
}
} class Mammal extends Animal {
constructor(age, furColor) {
super(age);
this.furColor = furColor;
} liveBirth() {
/* ... */
}
} class Human extends Mammal {
constructor(age, furColor, languageSpoken) {
super(age, furColor);
this.languageSpoken = languageSpoken;
} speak() {
/* ... */
}
}

 10  链式编程 在每个函数的结尾返回this即可 

(这种模式在JavaScript中非常有用,您可以在jQuery和Lodash等许多库中看到它。它使您的代码更具表现力,并且不再那么冗长。出于这个原因,我说,使用方法链接并查看代码的干净程度。在类函数中,只需this在每个函数的末尾返回即可,然后可以将更多的类方法链接到该函数上。)

class Car {
constructor(make, model, color) {
this.make = make;
this.model = model;
this.color = color;
} setMake(make) {
this.make = make;
// NOTE: Returning this for chaining
return this;
} setModel(model) {
this.model = model;
// NOTE: Returning this for chaining
return this;
} setColor(color) {
this.color = color;
// NOTE: Returning this for chaining
return this;
} save() {
console.log(this.make, this.model, this.color);
// NOTE: Returning this for chaining
return this;
}
} const car = new Car("Ford", "F-150", "red").setColor("pink").save();

11.async/await 来处理异步编程

参考地址来源 :https://github.com/ryanmcdermott/clean-code-javascript


js基石之---易读、易复用、易重构的 JavaScript 代码规范的更多相关文章

  1. 五分钟带你读懂 堆 —— heap(内含JavaScript代码实现!!)

    一.概念  说起堆,我们就想起了土堆,把土堆起来,当我们要用土的时候,首先用到最上面的土.类似地,堆其实是一种优先队列,按照某种优先级将数字"堆"起来,每次取得时候从堆顶取.  堆 ...

  2. JS Nice – JavaScript 代码美化和格式化工具

    JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...

  3. JavaScript必备:Google发布的JS代码规范(转)

    [翻译]关于Google发布的JS代码规范,你需要了解什么? 翻译 | WhiteYin 译文 | https://github.com/WhiteYin/translation/issues/10 ...

  4. 谷歌与Airbnb的JS代码规范

    谷歌JS代码规范 规范代码原因:代码规范是为了保持源代码编写模式一致,便于维护代码,可读性高. 1.使用空格代替tab 规范随后指出应该使用2个,而不是4个空格带实现缩进.(除了每一行的终止符序列,A ...

  5. 关于多本小说站的SEO—从”易读中文网”获得的心得体会

    从目前国内的网站流量来说,电影站,小说站,游戏站等的流量占总流量的比例还是很高的,许多站长把目光投入到了这几个方面,本文就着重来说对于小说站,尤其是多本小说站的SEO心得体会! 对于小说站来说,只要排 ...

  6. markdown简易快速的编辑格式(易读易写)

    实现简单快速书写,格式指定简便.易读易写 讲解http://wowubuntu.com/markdown/ 简单使用的讲解:http://www.ituring.com.cn/article/23 代 ...

  7. 如何让code变得更易读

    从开始编码到现在,从没有意识去如何去写出更加规范,更加易读的代码,只是按照需求将某一功能进行实现.下面是最近在网上搜索查看的一些通用的知识点,做一记录. 单一抽象层次 单一抽象层次是指一个函数或者方法 ...

  8. web设计_7_页面缺失图片或CSS的情况下仍然易读

    1. 在任何可能使用背景图片的地方应设置同样的颜色的背景色. 防止图片不能加载的情况下,页面内容同样保持较好可读性. 例如文字为白色,背景图为深色,如果不设置背景色,当背景图未成功加载, 而浏览器多数 ...

  9. python自定义小工具:密码匿名化、毫秒时间显示、人类易读字节

    import base64 import time def timestamp2datems(timestamp): ''' 时间戳转为日期字串,精确到ms.单位s :param timestamp: ...

随机推荐

  1. twoway 系列命令绘制地图

    twoway 系列命令绘制地图 ❝ 在谈到用stata绘制地图时,很多人首先想到的是spmap命令.其实,最常见的twoway系列命令就可以完成我们的大多数绘图需求. 对于spmap命令的使用,在线资 ...

  2. 如何让Java应用成为杀不死的小强?(上篇)

    各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 项庄舞剑意在沛公,而咱们上期主要借助应用服务器 Resin 的源码,体验了一次 JMX 的真实应用.鉴于 9012 年 ...

  3. python中的两个高阶函数map()和reduce()

    1.map()传入的有两个参数,函数和可迭代对象(Itreable),map()是把传入的函数依次作用于序列的每个元素,结果返回的是一个新的可迭代对象(Iterable). map()代码如下: # ...

  4. Shell:Day03笔记

    编程原理:1.编程结束  驱动 硬件默认是不能使用的   CPU控制硬件   不同的厂家硬件设备之间需要进行指令沟通,就需要驱动程序来进行“翻译”    编程语言的分类:  高级语言.超高级语言需要翻 ...

  5. android开发对应高德地图定位服务进度一

    进行android的高德地图开发首先需要进入高德地图的控制台进行注册登录.之后创建新的应用并且绑定软件得到相应的key. 这里面需要找到自己软件对应的多个SHA1.这里有发布版和调试版,以及对应的软件 ...

  6. Android Visibility控件显示和隐藏

    Android控件显示和隐藏 visibility 可见(visible) XML文件:android:visibility="visible" Java代码:view.setVi ...

  7. 计算机网络协议,PPP协议分析

    一.基本特点 1.PPP协议是计算机网络体系中第二层(数据链路层)的协议 2.PPP帧格式是以HDLC帧格式为基础,做了很少的改动(区别:PPP是面向字符的,而HDLC是面向位的) 3.PPP协议使用 ...

  8. "为文本添加下划线"组件:<u> —— 快应用组件库H-UI

     <import name="u" src="../Common/ui/h-ui/text/c_tag_underline"></impor ...

  9. Linux的文本编辑和文本内容查看命令

    Linux的文本编辑和文本内容查看命令 1.文本编辑命令 vi:用于编辑文本文件,基本上可以分为三种模式,分别是一般模式.编辑模式.命令行模式.    一般模式:当编辑一个文件时,刚进入文件就是一般模 ...

  10. android29之UI控件的抽屉式实现方法之一(DrawerLayout和NavigationView)

    添加依赖 implementation 'com.google.android.material:material:1.2.0-alpha06' 在Layout中创建两个Xml布局文件,header. ...