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 in
obj?.prop
null
判断运行符 ??
类似 ||
只有左侧值为null
或者undefined
时才会返回右侧值is
、assign
、getOwnPropertyDescriptors
、setPrototypeOf
、getPrototypeOf
、keys
、values
、entries
、fromEntries
symbol 一种新的原始数据类型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