1.let,const
2.promise
3.箭头函数
4.解构
5.set/map数据结构
6.proxy(代理器)
对外界的访问进行过滤和改写
就是对目标对象设置一层保护膜,假如外界对对象读取就必须通过这层保护膜,可以在这保护膜内对外界的访问进行改写。
对在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写
用来修改代理一些操作对象的默认行为,例如读取对象啊设置对象属性啊,删除对象之类的
给对象添加代理器
例如:
注意,要使得Proxy
起作用,必须针对Proxy
实例(上例是proxy
对象)进行操作,而不是针对目标对象(上例是空对象)进行操作。
var proxy = new Proxy(target,handler)
//target是你要代理的对象
//handler二个参数是一个配置对象,对于每一个被代理的操作,需要提供一个对应的处理函数,该函数将拦截对应的操作
进行读写的时候就直接用
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...in
、for...of
循环中,也不会被Object.keys()
、Object.getOwnPropertyNames()
、JSON.stringify()
返回 - 8.4 用Symbol当对象的属性时不能直接用obj.name这种形式,这样因为点运算符后面总是字符串,想要取数据或者添加数据可以用obj[name]这种形式,同理,在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。
例如:
var mySymbol = Symbol();
1.//给a添加属性
// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
var a = {
[mySymbol]: 'Hello!'
};
// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
2.//在对象内部声明
let s = Symbol();
let obj = {
[s](arg) { ... }
};
obj[s](123);//调用s方法