跳到主要内容

README

模拟实现Set

首先需要实现的方法

  • add(value):添加某个值,返回 Set 结构本身(可以链式调用)。
  • delete(value):删除某个值,删除成功返回true,否则返回false。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。
  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回键值对的遍历器。
  • forEach():使用回调函数遍历每个成员。

返回迭代器和遍历迭代器需要的工具函数

  • createIterator(arr) :创建迭代器
  • forOf(Iterator,callback):遍历迭代器

特别注意Set对于NaN的处理

  • 我们需要将多个NaN合成一个NaN
  • 内部查询NaN时不能用简单的比较,因为NaN!==NaN,我们需要用Symbol(NaN)做特殊处理
  • this.SymbolNaN = Symbol(NaN)
  • encodeVal 将NaN转为SymbolNaN
  • decodeVal SymbolNaN转为NaN