// Map 的key是有序的,Map的key可以是任意值(函数、对象、基本类型), Map中的键值对不会被垃圾回收机制所回收
// Map方法(set)
// 基本类型
let map = new Map()
map.set(1, '测试1')
map.set('1', '测试2')
map.set(true, '测试3')
map.set(null, '测试4')
map.set(undefined, '测试5')
// 函数、对象
map.set({}, '测试6')
map.set([], '测试7')
const key = function(){} // 如果键值是函数的话 不定义常量获取不到该键对应的值
map.set(key, '测试8')
map.set('test', {a:1,b:2})
console.log(map);
// Map方法(get)
console.log(map.get(null));
console.log(map.get('test'));
console.log(map.get(key));
// Map方法(has)
console.log(map.has(1));
console.log(map.has(key));
// Map方法(clear) 该方法为清空map里的所有键值对
// Map方法(dellete) 该方法为删除map里对应的键值对
map.delete(key)
console.log(map);
// Map方法(entries(键值对)、keys(键)、values(值))
console.log(map.entries());
for (const key of map.entries()) { // for of 只可以遍历数组 for in 遍历对象
console.log(key);
}
// Map方法(forEach) 获取到对应的值
map.forEach(item => {
console.log(item);
})
// WeakMap中key是有序的,WeakMap的key只可以是对象, WeakMap中的键值对会被垃圾回收机制所回收,WeakMap中没有entries、keys、values、forEach方法(存在get、set、delete、has方法),也没有size
let weakmap = new WeakMap()
// weakmap.set(1, 'test')
// console.log(weakmap); // Invalid value used as weak map key
const key = {a: 1, b: 2}
weakmap.set(key,'test')
console.log(weakmap);
console.log(weakmap.has(key));
console.log(weakmap.get(key));
weakmap.delete(key)
console.log(weakmap);
// Set 本身是一个构造函数(可以接受一个数组来做初始化),Set对象中存储的值总是唯一的,可以用作数组的去重
// +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复
// undefined 与 undefined 是恒等的,所以不重复
// NaN 与 NaN 是不恒等的,但是在 Set 中认为 NaN 与 NaN 相等,所有只能存在一个,不重复
// Set属性: size
const set1 = new Set([1,5,4,7,9,8,0])
console.log(set1.size);
// Set方法:add(可以链式调用) delete(删除某个值,成功返回true失败返回false),has(判断是否存在该值),clear(清除所有数据)
const set2 = new Set()
set2.add(1).add(2).add(4).add({a:1})
console.log(set2.has(4));
console.log(set2.delete(4));
set2.clear()
console.log(set2);
// Set中的遍历方法 keys():返回键名的遍历器。values():返回键值的遍历器。entries():返回键值对的遍历器。forEach():使用回调函数遍历每个成员。
const set3 = new Set(['red','green','yellow'])
for (const iterator of set3.keys()) {
console.log(iterator);
}
for (const iterator of set3.values()) {
console.log(iterator);
}
for (const iterator of set3.entries()) {
console.log(iterator);
}
set3.forEach(item => {
console.log(item);
})
WeakSet 结构与 Set 类似,也是不重复的值的集合
成员都是数组和类似数组的对象,若调用 add() 方法时传入了非数组和类似数组的对象的参数,就会抛出错误。
成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏
WeakSet 不可迭代,因此不能被用在 for-of 等循环中。
WeakSet 没有 size 属性。
仅有add、has、delete 方法