1.let,const

2.promise

3.箭头函数

4.解构

5.set/map数据结构

6.proxy(代理器)

对外界的访问进行过滤和改写
就是对目标对象设置一层保护膜,假如外界对对象读取就必须通过这层保护膜,可以在这保护膜内对外界的访问进行改写。
对在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写
用来修改代理一些操作对象的默认行为,例如读取对象啊设置对象属性啊,删除对象之类的
给对象添加代理器
例如:
注意,要使得Proxy起作用,必须针对Proxy实例(上例是proxy对象)进行操作,而不是针对目标对象(上例是空对象)进行操作。

  1. var proxy = new Proxy(target,handler)
  2. //target是你要代理的对象
  3. //handler二个参数是一个配置对象,对于每一个被代理的操作,需要提供一个对应的处理函数,该函数将拦截对应的操作
  4. 进行读写的时候就直接用
  5. proxy.obj这种形式

7.Iterator(遍历器)

它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
一种数据结构只要部署了Iterator接口,我们就称这种数据结构是”可遍历的“
默认的Iterator接口部署在数据结构的Symbol.iterator属性

8 symbol

表示独一无二的值
作用:ES5的对象属性名都是字符串,这容易造成属性名的冲突,为了保证添加到对象的属性名是唯一的可以用symbol
Symbol值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型。凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

注意点:

  • 8.1 不能用new命令在symbol前,这是因为生成的Symbol是一个原始类型的值,不是对象
  • 8.2 Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述
  • 8.3 Symbol 作为属性名,该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回
  • 8.4 用Symbol当对象的属性时不能直接用obj.name这种形式,这样因为点运算符后面总是字符串,想要取数据或者添加数据可以用obj[name]这种形式,同理,在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。

例如:

  1. var mySymbol = Symbol();
  2. 1.//给a添加属性
  3. // 第一种写法
  4. var a = {};
  5. a[mySymbol] = 'Hello!';
  6. // 第二种写法
  7. var a = {
  8. [mySymbol]: 'Hello!'
  9. };
  10. // 第三种写法
  11. var a = {};
  12. Object.defineProperty(a, mySymbol, { value: 'Hello!' });
  13. // 以上写法都得到同样结果
  14. a[mySymbol] // "Hello!"
  15. 2.//在对象内部声明
  16. let s = Symbol();
  17. let obj = {
  18. [s](arg) { ... }
  19. };
  20. obj[s](123);//调用s方法