【原理向】关于迭代、遍历、可迭代对象的理解

132 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天

迭代包含于遍历,是迭代器提供的一种方法迭代是按照一定顺序遍历可迭代对象, 而可迭代对象=要进行迭代的对象+迭代器

可迭代对象

可迭代的iterable类型(ES6提出的数据类型)包括一般的:

(1)Array

(2)map对象or集合

(3)NodeList

是一种类数组,而不是真正的数组,之所以这么说是因为它没有数组身上所含有的方法 NodeList对象的特点:

1. NodeList是一种类数组对象,用于保存一组**有序的节点**2. 可以通过方括号语法来访问NodeList的值,有item方法与length属性。
3.它并不是Array的实例,没有数组对象的方法

那么如何将NodeList类型的数组变成一个真正的数组呢?我们可以通过遍历Node List进一个真的Array里面,比较我想不到的方法是: 让Array的原型指向这个NodeList类型的数组对象,具体实现为: Array.prototype.slice.call(nodeList)// slice方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素

forEach

forEach是什么?

`forEach`是一个调用迭代器接口后通过封装之后的函数,负责遍历可迭代对象。

for循环跟forEach有什么区别呢?

本质上的区别其实是forEach是ES6提出的专门用来遍历可迭代对象的,而for循环只是js提出的单纯遍历出数组。

forEach有什么特点呢?

1. 迭代不可中断
2. 删除自身元素后index也不可被重置(如需要重置index需要使用splice:
    splice() 方法向/从[数组]中添加/删除项目,然后返回被删除的项目。注释:该方法会改变原始数组。

summary

image.png