# symbol
ES6新增原始数据类型Symbol,表示独一无二的值。它js语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
//生成方式
let s1 = Symbol('foo');
//Symbol 值作为对象属性名时,不能用点运算符。[]
let mySymbol = Symbol();
let a = {};
a[mySymbol] = 'Hello!';//个人感觉symbol比较鸡肋
# Set & Map
Set
类似于数组,但是成员的值都是唯一的const set = new Set([1, 2, 3, 4, 4]); [...set]//可以用...展开 // 去除数组的重复成员 [...new Set(array)]
方法有
- size() 成员总数
- add(v) 添加值,返回本身
- delete(v) 删除值,返回布尔
- has(v) 是否有某值,返回布尔
- clear() 清除所有值
可以用Array.from
转为数组
WeakSet 和set类似,区别:
- WeakSet 的成员只能是对象,而不能是其他类型的值。
- 其对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在WeakSe 之中,不计入垃圾回收机制
WeakSet 不可遍历,没有size()
- Map
类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
const map = new Map([ ['name', '张三'], ['title', 'Author'] ]); map.size // 2 map.set('age',34)//返回本身 map.has('name') // true map.get('name') // "张三" map.delete('title') map.clear()//清空
- WeakMap WeakMap结构与Map,区别:
- 只接受对象作为键名(null除外),不接受其他类型的值作为键名
- WeakMap的键名所指向的对象,不计入垃圾回收机制,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。