Map
可以用JS中的任何类型(对象或基本类型)的值作为Key,其中值可以是JS中的任何类型,并能记住插入顺序的键值对的集合。Map中的一个键只能出现一次(集合中是独一无二的),虽然JS表达式中 NaN 不等于 NaN ,但作为Key值却是相等的(即相同的键值)。
创建Map对象:
const map = new Map();
实例常用方法和属性
- set(key, value): 新增,返回当前map实例对象(可以链式调用)
- get(key): 获取当前key对应的value值,返回value值
- delete(key): 删除当前中key对应项,返加true/false(成功/失败)
- clear(): 清空当前map实例的所有值
- has(key): 判断当前key是否存在,返加true/false
- keys(): 返回map实例元素的key的迭代器(所有项对应key值的集合[类数组])
- values(): 返回map实例元素的value的迭代器(所有项对应value值的集合[类数组])
- entries(): 返回当实例的前新的迭代器
- forEach((key, value, map) => {}, thisArg): 按照插入顺序依次对 map 中每个键/值对执行一次给定的函数
- 属性 size:当前map的元素条数
WeakMap
key必须是弱引用对象或对象(object类型),值可以是任意类型的一组键/值对的集合。
强弱引用:只有在 WeakMap、WeakSet是才会存在这概念 。
- 强引用:对象引用(JS中默认对象的使用都是强引用)
- 弱引用:对象的唯一引用(只能存在唯一一个能访问到对象的变量)
可为WeakMap对象key值:
- 对象字面量、数组、Set、WeakSet、Map、WeakMap、方法(函数)、RegExp、正则字面量等
- new String()、new Number()、new Boolean()、new Date() 等 (Symbol不是构造函数,不能 new Symbol())
不可为WeakMap对象key值:
- 原始数据类型(string number null undefined boolean symbol)
- String() Number() Boolean() Date()
创建WeakMap对象:
const weakmap = new WeakMap();
实例常用方法
- set(key, value): 新增,返回当前weakmap实例对象(可以链式调用)
- get(key): 获取当前key对应的value值,返回value值
- delete(key): 删除当前中key对应项,返加true/false(成功/失败)
- has(key): 判断当前key是否存在,返加true/false
Set
值的集合, 按照插入的顺序迭代它的元素, 其中值只能出现一次(在当前Set对象唯一)
唯一的判定: 对象判定的是引用地址,基本类型判定的是内容,虽然JS表达式中 NaN 不等于 NaN ,但作为值却是相等的
创建Map对象:
const set = new Set(arr?);
实例常用方法和属性
- add(value): 新增,返回当前set实例对象(可以链式调用)
- delete(value): 删除指定值,返加true/false(成功/失败)
- clear(): 清空当前map实例的所有值
- has(value): 判断当前key是否存在,返加true/false
- keys(): 返回set实例元素的key的迭代器(所有项对应key值的集合[类数组])
- values(): 返回set实例元素的value的迭代器(所有项对应value值的集合[类数组])
- entries(): 返回当实例的前新的迭代器
- forEach((value, set) => {}, thisArg): 按照插入顺序依次对 set 中每个键/值对执行一次给定的函数
- 属性 size:当前set的元素条数
Set集合值的唯一性可以用于数组\字符去重
// 数组
const arr = [1,2,4,1];
const newArr = new Set(arr);
console.log(newArr); // Set(3) {1, 2, 4}
console.log(Array.from(newArr)); // (3) [1, 2, 4]
// 字符
const str = 'abcaabbcc';
const strSet = new Set(str);
console.log(strSet); // Set(3){'a', 'b', 'c'}
WeakSet
值必须是弱引用对象或对象(object类型)的集合。
可为WeakSet对象值:
- 对象字面量、数组、Set、WeakSet、Map、WeakMap、方法(函数)、RegExp、正则字面量等
- new String()、new Number()、new Boolean()、new Date() 等 (Symbol不是构造函数,不能 new Symbol())
不可为WeakMap对象key值:
- 原始数据类型(string number null undefined boolean symbol)
- String() Number() Boolean() Date()
创建WeakSet对象:
const weakSet = new WeakSet();
实例常用方法
- add(value): 新增,返回当前weakSet实例对象(可以链式调用)
- delete(value): 删除当前中value对应项,返加true/false(成功/失败)
- has(value): 判断当前value是否存在,返加true/false