ForeveHG / Frontend-Daily-Interview

学习,尝试回答一些前端面试题
1 stars 0 forks source link

08. 介绍下 Set、Map、WeakSet 和 WeakMap 的区别? #8

Open ForeveHG opened 5 years ago

ForeveHG commented 5 years ago

Set、Map、WeakSet 和 WeakMap都是ES6中新增的数据结构 Set: 类似数组,不重复的值的集合,对于是否重复的判断上约等于 ===,但两个NaN看成是相等的 长度属性: Set.prototype.size 操作方法: Set.prototype.add(value):添加某个值,返回 Set 结构本身。 Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。 Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。 Set.prototype.clear():清除所有成员,没有返回值。 遍历方法: Set.prototype.keys():返回键名的遍历器 Set.prototype.values():返回键值的遍历器 Set.prototype.entries():返回键值对的遍历器 Set.prototype.forEach():使用回调函数遍历每个成员 Set的遍历数据就是插入顺序

WeakSet: 不重复的值的集合,成员只能是对象,不能遍历,因为成员对象都是弱引用,不计入垃圾回收机制,所以WeakSet内的成员数量在垃圾回收机制运行前后很可能不一样,ES6规定WeakSet不可遍历 操作方法: WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。 WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。 WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。

Map: 类似对象,键值对的集合,但键值可以是任何值 长度属性:Map.prototype.size 方法: Map.prototype.set(key, value): 设置键名key对应的键值为value Map.prototype.get(key) : 读取键名对应的值 Map.prototype.has(key): 某个键是否在当前Map中 Map.prototype.delete(key): 删除某个键的键值 Map.prototype.clear(): 清除所有

遍历方法: Map.prototype.keys():返回键名的遍历器。 Map.prototype.values():返回键值的遍历器。 Map.prototype.entries():返回所有成员的遍历器。 Map.prototype.forEach():遍历 Map 的所有成员。

WeakMap: 类似Map,键值对的集合,与Map的区别是:键值只能是对象,键值引用的对象不计入垃圾回收机制,有助于防止内存泄露 操作方法: get() set() delete() has(),没有遍历方法