1.类、符号和装饰器
- 原型继承与类继承之间最主要的区别是,类可以使用extend继承其他类。
- 与函数声明不同,类声明不会提升到所在作用域的顶部。
- 类通过static关键字定义静态方法。
- 使用super将参数传递给底层的构造函数
- Symbol不具备字面量表示,不能与new同时使用,值不可变,独一无二,互不相等。
- Symbol作为属性可以将DOM元素映射到对象。
- Object.assign只会遍历自身可数的属性,不会递归对象。
- Object.is在执行NaN对比时会返回true,Object.is在执行+0和-0对比时会返回false,与===结果不同。
2.迭代与流程控制
- resolve可以导致Promise兑现或拒绝,但reject只能导致Promise被拒绝。
- Promise.reject的另一个用途是可以作为箭头函数的隐式返回值,这是throw语句无法做到的。
- 迭代器方法返回的对象必须有一个next方法。
- 生成器中看不到返回值的next方法,只能看到向序列中添加值的yield关键字。
- 生成器函数可以使用yield*将生成序列的任务委托给一个生成器对象或其他可迭代对象。
- 在生成器函数中使用try/catch块,能够像处理同步代码那样处理异步错误。
- await语句一般都可以改写成连缀的Promise,而异步函数中的变量声明则可以转移到每个Promise的反应函数中。
3.map与set
- ES6 map使用SameValueZero算法对键进行比较,其中NaN等于NaN,-0等于+0.
- WeakMap中没有迭代器协议,每个key都必须是一个对象。
- WeakMap中的“weak”表示其对键是弱引用的,如果除了用作WeakMap键之外,作为键的对象没有其他引用,那么它们就会被垃圾回收清除。
- Set没有键,**Set.entries()方法未几个中的每个元素返回[value,value]**的迭代器。
- map[Symbom.iterator]=map.entries
- set[Symbom.iterator]=set.values=set.keys
- WeakSet中的值必须是唯一的对象引用,如果没有其他引用,它将被垃圾回收。
3.代理Proxy
- 借助代理并定义明确的规则来禁止访问target对象的某些属性,对外只暴露代理而不暴露target对象,是代理的主要用途。
- 使用Proxy可以实现动态的属性私有化。
- 如果以后需要修改对象的原型,尽量使用Object.setPrototypeOf,不要使用**proto**。
4.ES6中内置API的改进
- Number
Number.isFinite比isFinite更安全因为其不会产生意想不到的转换, parseInt可以解析0x,但不能解析0b和0o
isFinite(null)
Number.isFinite(null)
- String
字符串迭代器迭代产生的是代码点