返回

探究可迭代对象与类数组对象的神秘面纱

前端

揭开可迭代对象的真面目

可迭代对象是指实现了 [Symbol.iterator] 方法属性的对象。这意味着,它们可以被 for...of 循环或扩展运算符 ... 遍历。常见的可迭代对象包括数组、字符串、Set 和 Map。

当我们使用 for...of 循环遍历可迭代对象时,实际上是在调用该对象的 [Symbol.iterator] 方法。这个方法返回一个迭代器,迭代器是一个对象,它具有 next() 方法,该方法返回一个包含值的对象,以及一个 done 布尔值,表示迭代是否已完成。

举个例子,以下代码演示了如何遍历一个数组:

const arr = [1, 2, 3, 4, 5];

for (const num of arr) {
  console.log(num);
}

输出:

1
2
3
4
5

类数组对象的另一重身份

类数组对象则具有一个 .length 属性,但它们并不一定是真正的数组。常见的类数组对象包括 arguments 对象和NodeList。

类数组对象可以被 Array.from() 方法转为真正的数组,也可以被 for 循环遍历。然而,类数组对象并没有 [Symbol.iterator] 方法,因此不能被 for...of 循环或扩展运算符 ... 遍历。

举个例子,以下代码演示了如何将类数组对象转为真正的数组:

const args = (function() {
  return arguments;
})();

const arr = Array.from(args);

for (const arg of arr) {
  console.log(arg);
}

输出:

1
2
3
4
5

可迭代对象与类数组对象的比较

特性 可迭代对象 类数组对象
定义 实现了 [Symbol.iterator] 方法 具有 .length 属性
遍历 可被 for...of 循环或扩展运算符 ... 遍历 可被 Array.from() 方法转为真正的数组,然后被 for 循环遍历
常见类型 数组、字符串、Set 和 Map arguments 对象和 NodeList

结语

可迭代对象与类数组对象是两个不同的概念,但它们都具有重要的作用。可迭代对象允许我们轻松地遍历它们的内容,而类数组对象可以通过 Array.from() 方法转为真正的数组,从而可以被更多的函数和方法使用。

希望这篇文章能够帮助你更好地理解可迭代对象与类数组对象,并能够在你的项目中灵活地使用它们。