【进阶篇】JavaScript代码规范

简介: 【进阶篇】JavaScript代码规范

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

1.变量命名规范有意义

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

image.gif

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);

image.gif

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

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

image.gif

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
});

image.gif

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();
}

image.gif

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)

image.gif

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);

image.gif

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

image.gif

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();

image.gif

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

参考地址来源 :GitHub - ryanmcdermott/clean-code-javascript: Clean Code concepts adapted for JavaScript


目录
相关文章
|
3月前
|
SQL 移动开发 前端开发
JavaScript 代码规范
JavaScript 代码规范
21 2
|
5月前
|
存储 前端开发 JavaScript
|
7月前
|
监控 JavaScript 前端开发
【JavaScript与TypeScript技术专栏】TypeScript在JavaScript项目中的渐进式采用
【4月更文挑战第30天】TypeScript是JavaScript的超集,引入静态类型、接口等特性,提升代码安全性和可读性。在JavaScript项目中采用TypeScript可享受类型安全、社区支持及优秀工具集成等优势。渐进式采用策略包括评估项目现状、逐步引入新旧模块、编写类型定义文件、配置编译选项和编写测试用例,以提高项目质量和效率。
68 0
|
7月前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】JavaScript与TypeScript混合编程模式探讨
【4月更文挑战第30天】本文探讨了在前端开发中JavaScript与TypeScript的混合编程模式。TypeScript作为JavaScript的超集,提供静态类型检查等增强功能,但完全切换往往不现实。混合模式允许逐步迁移,保持项目稳定性,同时利用TypeScript的优点。通过文件扩展名约定、类型声明文件和逐步迁移策略,团队可以有效结合两者。团队协作与沟通在此模式下至关重要,确保代码质量与项目维护性。
150 0
|
机器学习/深度学习 JSON JavaScript
【JavaScript】JS 函数式编程入门指南:从概念到实践 (二)
【JavaScript】JS 函数式编程入门指南:从概念到实践 (二)
|
分布式计算 JavaScript 前端开发
【JavaScript】JS 函数式编程入门指南:从概念到实践 (三)
【JavaScript】JS 函数式编程入门指南:从概念到实践 (三)
|
存储 缓存 自然语言处理
【JavaScript】JS 函数式编程入门指南:从概念到实践 (一)
【JavaScript】JS 函数式编程入门指南:从概念到实践 (一)
|
前端开发
前端知识案例4-javascript基础语法-开发环境配置
前端知识案例4-javascript基础语法-开发环境配置
42 0
前端知识案例4-javascript基础语法-开发环境配置
|
前端开发 JavaScript 安全
重学JavaScript【语法基础】
重学JavaScript 篇的目的是回顾基础,方便学习框架和源码的时候可以快速定位知识点,查漏补缺,所有文章都同步在 公众号(道道里的前端栈) 和 github 上。
143 0
|
JavaScript 前端开发
《javascript代码规范整理》上
《javascript代码规范整理》