迭代器
可迭代对象
- Set
- Map
- Array
- String
- Arguments
- NodeList
-
NodeList 对象是 Dom 节点的集合
-
NodeList 不是一个数组,是一个类似于数组的对象。
-
它也是一个可迭代的对象,可以使用 forEach() 迭代,还可以使用 Array.from() 将其转换为数组
-
在某些情况下 NodeList 可以是实时集合,也就是文档中 Dom 节点发生变化,NodeList 也会随之变化
<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 可区分的
- Object.is(),它可以区分 -0 和 +0,NaN 等于 NaN
-
去重,你可以利用 Set 进行去重,然后再使用 Array.from() 将可迭代对象转为数组
-
后续完善:数组去重 和 类数组转数组
-
去重:核心就是如何比较的问题,利用对象属性等
-
类数组:核心就是迭代生成新数组,slice()、展开运算符、序列化、Array.from等反正很多
-
Set.prototype.add(value)
- 向 Set 对象的末尾添加指定值,可以进行链式调用
- 返回 Set 对象本身
-
Set.prototype.delete(value)
- 删除 Set 对象指定的元素
- 删除成功返回 true, 失败返回 false
-
Set.prototype.forEach()
- 遍历,没有返回值
-
Set.prototype.has(value)
- 检测 Set 对象中是否存在 value 值
- 存在返回 true,不存在返回 false
-
Set.prototype.clear()
- 清空 Set 对象中所有的元素
- 没有返回值,undefined
- Set.prototype.values()
- 按照元素插入的顺序返回一个具有 Set 对象每个元素的全新 Iterator 对象
- Set.prototype.entries()
- 返回一个新的迭代器(Iterator)对象,该对象中的元素是类似于[value, value],键/值 对的形式,键和值的名字一样
- Set.prototype.size() 返回 Set 对象中元素的个数
Map 构造函数
- new Map([a]) : 参数a可以是数组,或者iterator对象