const let 来声明变量 只在块级作用域生效、没有变量提升、暂时性死区、不允许重复声明
变量的解构赋值
数值和 Math 对象的扩展
Number.isFinite()、Number.isNaN()、Number.parseInt()、Number.parseFloat()、Number.isInteger()、Math.sign()函数的扩展
reset 参数name 属性length 返回没有指定默认值的参数个数数组的扩展
Array.from() 将伪数组转化为数组keys/values/entries/flat/include/find/findIndex/fill对象的扩展
obj['a' + 'bc'] = 'dd'enumerable为false的属性for inobj?.propnull 判断运行符 ?? 类似 || 只有左侧值为null或者undefined时才会返回右侧值is、assign、getOwnPropertyDescriptors、setPrototypeOf、getPrototypeOf、keys、values、entries、fromEntriessymbol 一种新的原始数据类型Symbol,表示独一无二的值
Set,WeakSet,Map,WeakMap,类似数组和对象但是成员都是独一无二的,weak类型成员只能是对象,weakMap的key值只接受object,weak是弱引用
proxy 用于修改某些操作的默认行为,等同在语言层面的修改。可以理解成在目标对象之前设置一层拦截,拦截的操作和 Reflect一一对应
Reflect 是 ES6 为了操作对象提供的新的API
对一些完全属于语言内部的方法放到Reflect上譬如Object.defineProperty()
使Object上的方法更加合理譬如Object.defineProperty()定义错误时,使其返回false
让明显的命令式操作变成函数式delete obj.name —— Reflect.deleteProperty(obj,name)
name in obj Reflect.has(obj,name)
Proxy的拦截操作与Reflect上的方法一一对应
方法有Reflect.apply(Fun,thisArg,arg)、
Reflect.construct(Fun,args)、 Reflect.get(target,args,reciever)、 Reflect.set(target,args,reciever)、 Reflect.defineProperty(target,name,desc)、 Reflect.has(target,name)、 Reflect.OwnKeys(target)、 Reflect.isExtendsible()、 Reflect.preventExtensions()、 Reflect.getOwnPropertyDescriptor()、 Reflect.getPrototypeOf()、 Reflect.setPrototypeOf()
Promise——是异步编程的一种解决方案。promise对象的异步操作有三种状态,pending、fulfilled、rejected。只有异步操作的结果能决定操作处于哪个状态,状态一经改变,就不会再变
Iterator(遍历器)
Generator函数可以有多种理解的角度。语法上,首先可以理解为一个状态机,封装了多个内部状态。执行Generator函数,会返回一个遍历器对象,也就是说Generator除了状态机还是一个遍历器对象生成函数,生成的遍历器对象可以依次遍历Generator函数内部的每一个状态
Generator函数的异步应用:Generator函数就是异步操作的容器,它的自动执行需要一种机制,当异步有了结果能自动交回执行权。
回调函数。将异步操作包装成Thunk函数,在回调函数里交回执行权
Promise对象。将异步操作包装成promise对象在then方法里交回执行权
co模块就是用于Generator函数的自动执行,它其实就是将两种自动执行器(Thunk函数和promise对象)包装成一个模块。co模块的执行需要Generator函数yield命令后面只能是Thunk函数和promise对象
class