5.8 代理 Set 和 Map
集合类型的读写通过方法完成,且数据存在内部槽里,代理方式与普通对象差别很大。
一、与普通对象的差异
集合类型不用属性名读写,而是调用方法:
- Set 用
add(value)添加元素; - Map 用
set(key, value)设置键值对,用get(key)读取值。
二、需要代理的接口一览
| 接口 | Set | Map |
|---|---|---|
size | ✅ 元素个数 | ✅ 元素个数 |
| 添加 | add(value) | set(key, value) |
| 读取 | — | get(key) |
| 删除 | delete(value) | delete(key) |
| 判断存在 | has(value) | has(key) |
| 清空 | clear() | clear() |
| 遍历 | keys() / values() / entries() | keys() / values() / entries() |
| 回调遍历 | forEach(callback, thisArg) | forEach(callback, thisArg) |
相关
- 5.7.4 隐式修改数组长度的原型方法:数组章节的收尾
- 5.8.1 如何代理Set和Map:
size与原型方法为什么会在代理对象上报错 - 5.8.2 建立响应联系:让集合的读写可响应
- 5.8.3 避免污染原始数据:为什么方法必须绑定原始数据
- 5.8.4 处理forEach:
forEach的键依赖与无限循环 - 5.8.5 迭代器方法:
keys/values/entries与Symbol.iterator - 5.8.6 values与keys方法:遍历期间新增元素导致的无限执行