迭代器相关

100 阅读2分钟

迭代器

可迭代对象

  1. Set
  2. Map
  3. Array
  4. String
  5. Arguments
  6. NodeList
  • NodeList 对象是 Dom 节点的集合

  • NodeList 不是一个数组,是一个类似于数组的对象。

  • 它也是一个可迭代的对象,可以使用 forEach() 迭代,还可以使用 Array.from() 将其转换为数组

  • 在某些情况下 NodeList 可以是实时集合,也就是文档中 Dom 节点发生变化,NodeList 也会随之变化

  • MDN

<script>
    // 大多数情况下,获取 dom 集合都是实时的集合,只有个别情况下例外
    var parent = document.getElementById('parent');
    var child_nodes = parent.childNodes;
    
    // 通过 class 获取
    var child_nodes = document.getElementsByClass('child');
    
    // 后续补全 Dom 笔记
</script>
  • 静态集合, document.querySelectorAll 会返回静态的集合。

Set 构造函数

  • Set 对象是值得集合,你可以按照插入得顺序迭代它的元素。Set 中的元素只会出现一次

  • Set对象允许你存储任何类型的唯一值,无论是原始值还是引用值

  • Set 可区分的

image.png

  • Object.is(),它可以区分 -0 和 +0,NaN 等于 NaN

image.png

  • 去重,你可以利用 Set 进行去重,然后再使用 Array.from() 将可迭代对象转为数组

  • 后续完善:数组去重 和 类数组转数组

  • 去重:核心就是如何比较的问题,利用对象属性等

  • 类数组:核心就是迭代生成新数组,slice()、展开运算符、序列化、Array.from等反正很多

  1. Set.prototype.add(value)

    • 向 Set 对象的末尾添加指定值,可以进行链式调用
    • 返回 Set 对象本身
  2. Set.prototype.delete(value)

    • 删除 Set 对象指定的元素
    • 删除成功返回 true, 失败返回 false
  3. Set.prototype.forEach()

    • 遍历,没有返回值
  4. Set.prototype.has(value)

    • 检测 Set 对象中是否存在 value 值
    • 存在返回 true,不存在返回 false
  5. Set.prototype.clear()

    • 清空 Set 对象中所有的元素
    • 没有返回值,undefined

image.png

  1. Set.prototype.values()
    • 按照元素插入的顺序返回一个具有 Set 对象每个元素的全新 Iterator 对象

image.png

  1. Set.prototype.entries()
    • 返回一个新的迭代器(Iterator)对象,该对象中的元素是类似于[value, value],键/值 对的形式,键和值的名字一样

image.png

  1. Set.prototype.size() 返回 Set 对象中元素的个数

Map 构造函数

  • new Map([a]) : 参数a可以是数组,或者iterator对象

image.png