set-like (集合)对象只要满足下面几个条件即可:
- 一个包含
size
属性,且返回值为 number。 - 一个
has()
方法,接受一个 key 并返回布尔值。 - 一个
keys()
方法,返回一个迭代器。
设计理念
在 JavaScript 中,Map 和 Set 都有迭代器方法
[@@iterator]()
,用于遍历其元素。然而,Map 的迭代器生成的是键值对(entries),而 Set 的迭代器生成的是单个元素。为了使 Map 也能作为集合类对象使用,选择调用keys()
方法,而不是[@@iterator]()
方法,我认为是一个比较合理的方案。但是比较糟糕的是 Array 和 Weakmap 都不是 set-like 对象。
例子
例如,Map 对象是集合类对象,因为它们也有 size
属性、has()
方法和 keys()
方法,所以在集合方法中使用时,可以直接使用: