# Map 对象
# 一个带键的数据项的集合
- Map 继承自 Object 对象。
- set以RBTree作为底层容器
- 不允许key重复
- Map的键是不能修改的,但是其键对应的值是可以修改的
# 和Object的区别
- 一个Object 的键只能是字符串或者 Symbols,但一个Map 的键可以是任意值。
- Map中的键值是有序的(FIFO 原则),而添加到Object中的键则不是。
# 和WeakMap之间的区别?
WeakMap只能以复杂数据类型(对象)作为key,并且key值是弱引用,对于垃圾回收更加友好。 新建实例:
// Object
var obj = {...};
var obj = new Object();
var obj = Object.create(null);
// Map
var map = new Map([[1, 2], [2, 3]]); // map = {1 => 2, 2 => 3}
1
2
3
4
5
6
7
2
3
4
5
6
7
# Set 对象
# 是一组唯一值的集合
- Set 继承自 Object 对象
- set以RBTree作为底层容器
- 不允许key重复
- 所有得元素的只有key没有value,value就是key
- 不能通过迭代器来改变set的值,因为set的值就是键
# 和Array的区别
- Array元素可重复,Set不允许重复
# 和WeakSet之间的区别?
WeakSet 的成员只能是复杂数据类型(对象),而不能是其他类型的值。WeakSet中的成员都是弱引用,对于垃圾回收更加友好。 新建实例:
// Array
var arr = [1,2,3];
var arr = new Array();
var arr = new Set([1,2,3]);
// Set
var set = new Set([1,2,3]) //set = { 1, 2, 3 }
1
2
3
4
5
6
7
2
3
4
5
6
7
# 例子
Set 数组去重:
var arr = [5, 5, 3, 4, 5, 5, 2];
var item = new Set(arr);
var res = [...item]
console.log(res); // [ 5, 3, 4, 2 ]
1
2
3
4
2
3
4