set-like (集合)对象只要满足下面几个条件即可:

  1. 一个包含 size 属性,且返回值为 number。
  2. 一个 has() 方法,接受一个 key 并返回布尔值。
  3. 一个 keys() 方法,返回一个迭代器。

设计理念

在 JavaScript 中,Map 和 Set 都有迭代器方法 [@@iterator](),用于遍历其元素。然而,Map 的迭代器生成的是键值对(entries),而 Set 的迭代器生成的是单个元素。为了使 Map 也能作为集合类对象使用,选择调用 keys() 方法,而不是 [@@iterator]() 方法,我认为是一个比较合理的方案。但是比较糟糕的是 Array 和 Weakmap 都不是 set-like 对象。

例子

例如,Map 对象是集合类对象,因为它们也有 size 属性、has() 方法和 keys() 方法,所以在集合方法中使用时,可以直接使用:

const a = new Set([1, 2, 3]);
const b = new Map([
  [1, "one"],
  [2, "two"],
  [4, "four"],
]);
console.log(a.union(b)); 
// Set(4) {1, 2, 3, 4}

其他关联 set-like API

readonly

writable

本文标题:set-like

永久链接:https://iceprosurface.com/code/js/set-like/

查看源码: