ES6文档:https://es6.ruanyifeng.com/#docs/set-map
ES6(2015年公布)
------------
版本变动最多,退出许多语法个性;
兼容性:label 能够把ES6编译成ES5。
ES6 申明变量的六种办法:
ES5 只有两种申明变量的办法:var命令和function命令。
ES6除了增加let和const命令,前面章节还会提到,
另外两种申明变量的办法:import命令和class命令。所以,ES6 一共有6种申明变量的办法。
let变量申明
const申明常量,值不能批改
解构赋值:
解构赋值:ES6容许依照肯定模式从数组和对象中提取值,对变量进行赋值。
简化对象写法
箭头函数(=>)以及申明
箭头函数有几个应用留神点。
函数体内的this对象,就是定义时所在的对象,而不是应用时所在的对象。
不能够当作构造函数,不具备prototype原型对象,不能够应用new命令,否则会抛出一个谬误。
没有arguments对象,该对象在函数体内不存在。如果要用,能够用 rest 参数代替。
不能够应用yield命令,因而箭头函数不能用作 Generator 函数
箭头函数都是匿名函数
箭头函数三种简化形式
this的动态个性:
不能作为构造函数 实例化对象:
不能应用 arguments 变量:
简化实例:
箭头函数适宜与this无关的回调,比方:定时器 数组的办法回调
箭头函数不适宜与this无关的回调,比方:事件回调、对象的办法
容许给函数参数赋默认值
rest参数
扩大运算符
扩大运算符
扩大运算符能将「数组」转换为逗号分隔的「参数序列」;
扩大运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
扩大运算符的使用
数组的合并:[...数组1, ...数组2]
数组的克隆:[...数组]
将伪数组转为真数组:
新数据类型Symbol
ES6引入一个新数据类型Symbol来标识举世无双的值,是一种相似于字符串的数据类型。
Symbol特点:
Symbol的值是惟一的,用来解决命名抵触的问题
Symbol值不能与其余数据进行运算
Symbol定义的对象属性不能应用for...in循环遍历,然而能够应用Reflect.ownKeys来获取对象的所有键名。
在for...in迭代中不可枚举,object.getOwnPropertyNames() 不会返回symbol对象的属性,能够通过object.getOwnPropertySymbols() 获取。
Symbol创立
应用Symbol给对象增加属性或办法
Symbol的内置属性
数组
Map:映射 一对一
reduce:汇总 一堆进去一个 算总数,平均数
filter:过滤器
forEach:循环遍历(迭代)
字符串
新办法 startsWith endsWith
字符串模板 ``(反引号)
面向对象
class类
区别:
类不存在变量晋升
this 的指向
ES6的面向对象:
1、减少class关键字,结构器和类离开了
2、 class外面间接加办法
class类的继承extends,super
super:超类 == 父类
面向对象 - 实例
模块化,组件化
JSX == babel ==browser.js
JSON
JSON对象
JSON.stringify():json转字符串
JSON.parse(): 字符串转json
json的简写,办法简写
名字和值(key和value)一样的时候,能够值保留一个。
对象的简写
promise
https://mp.weixin.qq.com/s?__...
特点:
promise的状态一经扭转就不能再更改,不容许返回。
promise.all 全副胜利才调用胜利办法,有一个没胜利就调用失败办法
promise.race 比赛,所有实例里第一个返回的状态,是胜利就走胜利
promise.any 有一个胜利就胜利,全副失败才失败
promise.allSettled 包装一组实例,记录所有状态返回。
finally 所有状态都会走
实现retry https://blog.csdn.net/qq_40420294/article/details/101920789
异步:操作之间没什么关系,能够同时进行多个操作 毛病 代码更简单
同步:操作间接是相干的 同时只能做一件事 代码更简略
ajax申请 异步
长处:
Promise 是异步编程的一种解决方案,比传统的异步解决方案【回调函数】和【事件】更正当、更弱小。
promise 打消异步操作 用同步一样的形式来书写异步
.then能够链式调用,解决回调天堂的问题,解决异步的问题,new了
毛病:
不不便调用、一旦执行无奈进行,状态扭转后无奈扭转。
不容易定位错误信息
Promise.then()根本应用:
Promise.all():解析多个申请
全副胜利才调用胜利办法,有一个没胜利就调用失败办法
Promise.race():解析多个申请
比赛,所有实例里第一个返回的状态,是胜利就走胜利
generator
generator是一个一般函数,两个特色:function和函数名之间有*,外部应用yield表达式。
generator函数和一般函数的区别:generator函数中途能够进行
yield:临时放弃执行
next()
Proxy 拦挡,代理器(vue3原理)
数组的key是他自身
重载(overload):用本人的定义笼罩了语言的原始定义
所要代理指标对象 , 配置对象
Proxy实例的办法:
get():指标对象 拦截器 proxy自身
set 指标对象 属性名 属性值 实例自身
apply 指标对象 指标对象上下文 数组
has 指标对象 属性名
construst 拦挡构造函数
迭代器(Iterator):自定义遍历数据
任何数据只有部署Iterator接口,就能够实现遍历操作,次要供for...of生产。
Set
WeakSet
WeakSet 中的对象都是弱援用,即垃圾回收机制不思考 WeakSet 对该对象的援用,也就是说,如果其余对象都不再援用该对象,那么垃圾回收机制会主动回收该对象所占用的内存,不思考该对象还存在于 WeakSet 之中。
Map
ES6提供了Map数据结构,它相似于对象,也是键值对的汇合。然而“键”的范畴不限于字符串,各种类型的值(包含对象)都能够当做键。Map也实现了iterator接口,所以能够应用[扩大运算符]和[for ... of...]进行遍历。
Map的属性和办法:
size 返回Map的元素个数
set 减少一个新元素,返回以后Map
get 返回键名对象的键值
has 检测Map中是否蕴含某个元素,返回boolean值
clear 清空集合,返回undefined
ES7(2016年公布)
------------
ES8(2017年公布)
------------
async await
https://www.zhihu.com/question/39571954
概念:async函数就是generator函数的语法糖。async函数,就是将generator函数的*换成async,将yield替换成await。
异步编程的终极解决方案。
await前面的是同步工作,await上面的是微工作 ,.then是微工作
函数执行时,一旦遇到await就会返回。等到触发的异步操作实现(并且调用栈清空),再接着执行函数体内前面的语句。
async/await是基于Promise实现的,async函数的返回值是promise对象
promise对象的后果由async函数执行的返回值决定。
长处:
async和await两种语法联合能够让异步代码像同步代码一样
解决链式调用,不须要像Promise一样始终.then,不须要写匿名函数解决Promise的resolve值,也不须要定义多余的data变量,还防止了嵌套代码。
毛病:
可能导致性能问题,因为await会阻塞代码
async await和promis的区别:
相同点:都是优化异步编程体验的解决方案;
不同点:
promise是应用层的解决方案,它有一个标准,不同的语言也能够实现,它只能异步的处理错误,在js里实质是一个对象
async/await是语言层的解决方案,能够让用户像编写同步代码一样,通过try/catch能够同步地处理错误。
promise解决回调天堂的问题,async/await返回的是一个promise对象,解决promise里不停.then的问题
ES9(2018年公布)
------------
ES10(2019年公布)
-------------
ES11(2020年公布)
-------------