介绍
接着 << 深入理解 Vue 3 响应性原理 — Proxy >> 开始了解 WeakMap、Map、Set 函数
例子
这是每个函数,在new之后,在控制台中打印的结果
set函数里边存储的是,类似数值一样的集合
map里边存的有 key, 和 value,不同的是,key 是对象类型
weakMap 存储形式和 map 一样
Set 对象允许你存储任何类型的唯一值
特点:
- Set对象是值的集合
- 按照插入的顺序迭代它的元素
- Set中的元素只会出现一次,即Set中的元素是唯一的
- NaN和undefined都可以被存储在Set 中, 在Set中NaN之间被视为相同的值
方法:
methodsName | description | return |
---|---|---|
add | 向尾部添加一个元素 | Set对象 |
clear | 移除对象内的所有元素 | 无 |
delete | 移除set中与这个值相等的元素 | Boolean |
entries | 无参数 | 一个新的迭代器对象,键和键值相等 |
forEach | 遍历对象,可以提供this | 无 |
has | 是否在与否 | Boolean |
values | 无参数 | 新的迭代器对象 |
keys | 与values方法相同 | 新的迭代器对象 |
Map 对象保存键值对,并且能够记住键的原始插入顺序。
特点:
- 键的对比是基于 sameValueZero 算法
- NaN 是与 NaN 相等的, 剩下的按照 === 运算结果判断是否相等
- -0 与 0 是相等的(有兼容性)
Map
方法:
methodsName | description | return |
---|---|---|
get | 传入key | 某个 Map 对象中的一个指定元素 |
clear | 移除对象内的所有元素 | 无 |
delete | 移除指定的元素 | Boolean |
entries | 无参数 | 一个新的迭代器对象 |
forEach | 遍历对象,可以提供this | 无 |
has | 是否在与否 | Boolean |
values | 无参数 | 新的value值迭代器对象 |
keys | 与values方法相同 | 新的key值的迭代器对象 |
set | 添加或更新一个指定了键(key)和值(value)的(新)键值对(key, value) | Map对象 |
与Object 区别:
类型 | Map | Object |
---|---|---|
意外的键 | 默认不包含任何键 | 原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。 |
键的类型 | 一个 Map的键可以是任意值,包括函数、对象或任意基本类型。 | 必须是一个 String 或是Symbol。 |
键的顺序 | Map 中的 key 是有序的 | 键是无序的 |
Size | 通过size 属性获取键值对个数 | 键值对个数只能手动计算 |
迭代 | 可以直接被迭代 | 需要以某种方式获取它的键然后才能迭代 |
性能 | 在频繁增删键值对的场景下表现更好 | 在频繁添加和删除键值对的场景下未作出优化 |
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的
特点:
- 键必须是对象,值是任意的 !!!
- key不能被枚举
- 如果没有其他引用存在,垃圾回收能正确的进行
方法: get, set, delete, has