js-es6学习笔记-编程风格

ZhangCui      2022-02-09     349

关键词:

1、ES6提出了两个新的声明变量的命令:letconst。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。

2、var命令存在变量提升效用,let命令没有这个问题。建议不再使用var命令,而是使用let命令取代。

3、在letconst之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。 JavaScript 编译器会对const进行优化,所以多使用const,有利于提供程序的运行效率。所有的函数都应该设置为常量。

4、静态字符串一律使用单引号或反引号,不使用双引号。动态字符串使用反引号。

// bad
const a = "foobar";
const b = ‘foo‘ + a + ‘bar‘;

// acceptable
const c = `foobar`;

// good
const a = ‘foobar‘;
const b = `foo${a}bar`;
const c = ‘foobar‘;

5、使用数组成员对变量赋值时,优先使用解构赋值。函数的参数如果是对象的成员,优先使用解构赋值。如果函数返回多个值,优先使用对象的解构赋值,而不是数组的解构赋值。这样便于以后添加返回值,以及更改返回值的顺序。

// bad
function getFullName(user) {
  const firstName = user.firstName;
  const lastName = user.lastName;
}

// good
function getFullName(obj) {
  const { firstName, lastName } = obj;
}

// best
function getFullName({ firstName, lastName }) {
}

6、单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。

如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义。

// bad
const obj = {
  id: 5,
  name: ‘San Francisco‘,
};
obj[getKey(‘enabled‘)] = true;

// good
const obj = {
  id: 5,
  name: ‘San Francisco‘,
  [getKey(‘enabled‘)]: true,
};

7、使用扩展运算符(...)拷贝数组。

// bad
const len = items.length;
const itemsCopy = [];
let i;

for (i = 0; i < len; i++) {
  itemsCopy[i] = items[i];
}

// good
const itemsCopy = [...items];

8、使用Array.from方法,将类似数组的对象转为数组。

const foo = document.querySelectorAll(‘.foo‘);
const nodes = Array.from(foo);

 

js-es6学习笔记-generator函数的异步应用

1、ES6诞生以前,异步编程的方法,大概有下面四种。回调函数事件监听发布/订阅Promise对象Generator函数将JavaScript异步编程带入了一个全新的阶段。2、所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为... 查看详情

js-es6学习笔记-generator函数

1、Generator函数是ES6提供的一种异步编程解决方案。形式上,Generator函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield语句,定义不同的内部状态。2、Generator函数的... 查看详情

js-es6学习笔记-class

1、Class之间可以通过extends关键字实现继承。classColorPointextendsPoint{constructor(x,y,color){super(x,y);//调用父类的constructor(x,y)this.color=color;}toString(){returnthis.color+‘‘+super.toString();//调用父类的toString()}}上面 查看详情

js-es6学习笔记-module

1、如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法。//constants.js模块exportconstA=1;exportconstB=3;exportconstC=4;//test1.js模块import*asconstantsfrom‘./constants‘;console.log(constants.A);//1console.log(... 查看详情

js-es6学习笔记-async函数

1、async函数是Generator函数的语法糖。前文有一个Generator函数,依次读取两个文件。varfs=require(‘fs‘);varreadFile=function(fileName){returnnewPromise(function(resolve,reject){fs.readFile(fileName,function(error,data){if(error)reje 查看详情

js-es6学习笔记-async函数

1、await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中。2、多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。//写法一let[foo,bar]=awaitPromise.all([getFoo(),getBar()]);//... 查看详情

js-es6学习笔记-reflect

1、Reflect对象与Proxy对象一样,也是ES6为了操作对象而提供的新API。Reflect对象的设计目的有这样几个。将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。修改某些Object方法的返回结果,让其... 查看详情

js-es6学习笔记-class

1、ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。2、//定义类classPoint{constructor(x,y){this.x=x;this.y=y;}toString(){return‘(‘+this.x+‘,‘+this.y+‘)‘;}}上面代码定义了一个... 查看详情

js-es6学习笔记-class

1、与函数一样,类也可以使用表达式的形式定义。constMyClass=classMe{getClassName(){returnMe.name;}};这个类的名字是MyClass而不是Me,Me只在Class的内部代码可用,指代当前类。如果类的内部没用到的话,可以省略Me,也就是可以写成下面的... 查看详情

js-es6学习笔记-module

1、如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。import{lastNameassurname}from‘./profile‘;2、import命令具有提升效果,会提升到整个模块的头部,首先执行。这种行为的本质是,import命令是编... 查看详情

js-es6学习笔记-class

1、Object.getPrototypeOf方法可以用来从子类上获取父类。因此,可以使用这个方法判断,一个类是否继承了另一个类。2、super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。第一种... 查看详情

js-es6学习笔记-module

1、<script>标签打开defer或async属性,脚本就会异步加载。渲染引擎遇到这一行命令,就会开始下载外部脚本,但不会等它下载和执行,而是直接执行后面的命令。defer与async的区别是:前者要等到整个页面正常渲染结束,才会... 查看详情

js-es6学习笔记-iterator

1、遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。2、Iterator的作用有三个:一是为各种数据结构,提... 查看详情

js-es6学习笔记-generator函数的应用

1、异步操作的同步化表达Generator函数的暂停执行的效果,意味着可以把异步操作写在yield语句里面,等到调用next方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放在yield语句下面,反正要... 查看详情

js-es6学习笔记-set结构和map结构

1、ES6提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。2、Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。3、Set.proto... 查看详情

freertosfreertos学习笔记—学习freertos的编程风格和本质(代码片段)

FreeRTOS的编程风格学习一个RTOS,搞懂它的编程的风格很重要,这可以大大提供我们阅读代码的效率。下面我们就以FreeRTOS里面的数据类型、变量名、函数名和宏这几个方面做简单介绍。1、数据类型在FreeRTOS中,使用的... 查看详情

lua学习笔记——风格

前一篇大概学习了lua常用的语法,都是些刚入门时应该了解的。见这里 Lua学习笔记(1)——语法这篇主要记录一些关于lua代码风格的经验,如果不了解它们,还是拿着函数式或传统面向对象的风格去写lua,就永远无法了... 查看详情

linuxc编程一站式学习笔记6(代码片段)

LinuxC编程一站式学习笔记chap6循环结构文章目录LinuxC编程一站式学习笔记chap6循环结构一.while语句递归VS循环函数式编程(FunctionalProgramming)&命令式编程(ImperativeProgramming)无限递归&无限循环习题欧几里得算... 查看详情