ES6

Symbol

Set和Map

Set

Map

Proxy

get()

set()

apply()

Reflect

Promise对象

var promise=new Promise(function(resolve,reject) {
        if() {
           resolve(value); 
        }else {
           reject(error);
        }
});

promise.then(function() {

    },function() {

});

Iterator和for...of循环

Generator

// 异步编程(传统方法【ES6之前】)
1.回调函数
2.事件监听
3.发布/订阅
4.Promise对象

async函数

// ES2017

Class

严格模式

constructor

类的实例对象

Class表达式

不存在变量提升

私有方法

私有属性

this指向

name属性

Class的取值函数(getter)和存值函数(setter)

Class的Generator方法

Class的静态方法

Class的静态属性和实例属性

new.target属性

Class的继承

Object.getPrototypeOf()

super关键字

类的prototype属性和proto属性

原生构造函数的继承

Mixin模式的实现

Decorator(修饰器)

类的修饰

// 修饰器是一个函数,用来修改类的行为
// 修饰器函数的第一个参数,就是所要修饰的目标类
function testable(target) {
           
}

方法的修饰

// 修饰器只能用于类和类的方法,不能用于函数

Module语法

严格模式

export命令

import命令

模块的整体加载

export default命令

export与import的复合写法

模块的继承

跨模块常量

import()

Module的加载实现

浏览器加载

// 传统方法
defer是渲染完再执行
async是下载完就执行

// 加载规则
// ES6
type="module"

ES6模块与CommonJS模块的差异

1.CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用
2.CommonJS模块是运行时加载,ES6模块是编译时输出接口
3.CommonJS加载的是一个对象(即module.exports属性)

Node加载

// 1.解决方案:将两者分开,ES6模块和CommonJS采用各自的加载方案
// 2.Node采用CommonJS模块格式,模块的输出都定义在module.exports这个属性上面
// 3.在Node环境中,使用import命令加载CommonJS模块,Node会自动将module.exports属性,当作模块的默认输出,即等同于export default

编程风格

块级作用域

// 1.let取代var 
// 2.全局常量和线程安全(在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量)

字符串

// 1.静态字符串一律使用单引号或反引号,不使用双引号
// 2.动态字符串使用反引号

解构赋值

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

对象

// 1.单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾
// 2.对象尽量静态化,一旦定义,就不得随意添加新的属性。如果添加属性不可避免,要使用Object.assign方法
// 3.如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义
// 4.对象的属性和方法,尽量采用简洁表达法,这样易于描述和书写

数组

1.使用扩展运算符(...)拷贝数组
2.使用Array.from方法,将类似数组的对象转为数组

函数

// 1.立即执行函数可以写成箭头函数的形式
(() => {
      console.log('osoLife');
})();

// 2.箭头函数取代Function.prototype.bind,不应再用self/_this/that绑定this
// 3.简单的、单行的、不会复用的函数,建议采用箭头函数。如果函数体较为复杂,行数较多,还是应该采用传统的函数写法
// 4.所有配置项都应该集中在一个对象,放在最后一个参数,布尔值不可以直接作为参数

Map结构

// 注意区分Object和Map,只有模拟现实世界的实体对象时,才使用Object。如果只是需要key: value的数据结构,使用Map结构。因为Map有内建的遍历机制

Class

// 1.总是用Class,取代需要prototype的操作。因为Class的写法更简洁,更易于理解
// 2.使用extends实现继承,因为这样更简单,不会有破坏instanceof运算的危险

你可能感兴趣的:(ES6)