这是我参与「第四届青训营 」笔记创作活动的第10天
Symbol
ES6中引入了一个新的数据类型Symbol,表示独一无二的值,通过Symbol()函数生成。 Symbol()函数之前不能使用new命令。
Set
类似于一个数组,但是里面的成员都是不重复的,类似于python的集合。 使用Set()来构造一个Set,并且用add()加入新的成员,可以用来去除数组或者字符串重复的内容。
delete()可以去除某个值,并返回布尔值表示是否删除成功。
has()判断Set中是否含有某个成员。
clear():清空Set。
Set的遍历
- keys()
- values()
- entries()
- forEach()
Set的遍历顺序是插入顺序。
WeakSet
WeakSet的成员只能是对象,不能是其它类型的值。 WeakSet有add(),delete(),has()这三个方法。
Map
Map是一种更加完善的Hash结构,提供了“值-值”的对应。
Map的属性和操作方法
- size()
- set(key,value)
- get(key)
- has(key)
- delete(key)
- clear()
遍历:
- keys()
- values()
- entries()
- forEach()
WeakMap
WeakMap只接受对象作为键名,并且所指的对象不计入垃圾回收机制。
Proxy
proxy用于修改某些操作的默认行为,对目标对象之前假设一层拦截,因此可以对外界的访问进行过滤和改写。
var proxy = new Proxy(target, handler);
target代表要拦截的对象,handler代表拦截行为。 如果handler没有设置任何拦截,就直接通向元对象。
以下是proxy支持的拦截操作一览:
- get(target, propKey, receiver) :拦截对象属性的读取,比如
proxy.foo和proxy['foo']。 - set(target, propKey, value, receiver) :拦截对象属性的设置,比如
proxy.foo = v或proxy['foo'] = v,返回一个布尔值。 - has(target, propKey) :拦截
propKey in proxy的操作,返回一个布尔值。 - deleteProperty(target, propKey) :拦截
delete proxy[propKey]的操作,返回一个布尔值。 - ownKeys(target) :拦截
Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)、Object.keys(proxy)、for...in循环,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而Object.keys()的返回结果仅包括目标对象自身的可遍历属性。 - getOwnPropertyDescriptor(target, propKey) :拦截
Object.getOwnPropertyDescriptor(proxy, propKey),返回属性的描述对象。 - defineProperty(target, propKey, propDesc) :拦截
Object.defineProperty(proxy, propKey, propDesc)、Object.defineProperties(proxy, propDescs),返回一个布尔值。 - preventExtensions(target) :拦截
Object.preventExtensions(proxy),返回一个布尔值。 - getPrototypeOf(target) :拦截
Object.getPrototypeOf(proxy),返回一个对象。 - isExtensible(target) :拦截
Object.isExtensible(proxy),返回一个布尔值。 - setPrototypeOf(target, proto) :拦截
Object.setPrototypeOf(proxy, proto),返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。 - apply(target, object, args) :拦截 Proxy 实例作为函数调用的操作,比如
proxy(...args)、proxy.call(object, ...args)、proxy.apply(...)。 - construct(target, args) :拦截 Proxy 实例作为构造函数调用的操作,比如
new proxy(...args)。
Reflect
也是ES6中新添加的API。 它有以下几个作用:
- 能从Reflect对象上拿到语言内部的方法。
- 修改某些Object方法返回的结果,让其变得更加合理。
- 能将Object操作都变为函数行为。 4.Reflect对象的方法和Proxy对象的方法一一对应。
Reflect对象的静态方法
- Reflect.apply(target, thisArg, args)
- Reflect.construct(target, args)
- Reflect.get(target, name, receiver)
- Reflect.set(target, name, value, receiver)
- Reflect.defineProperty(target, name, desc)
- Reflect.deleteProperty(target, name)
- Reflect.has(target, name)
- Reflect.ownKeys(target)
- Reflect.isExtensible(target)
- Reflect.preventExtensions(target)
- Reflect.getOwnPropertyDescriptor(target, name)
- Reflect.getPrototypeOf(target)
- Reflect.setPrototypeOf(target, prototype)