返回
探究可迭代对象与类数组对象的神秘面纱
前端
2023-12-15 04:01:01
揭开可迭代对象的真面目
可迭代对象是指实现了 [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()
方法转为真正的数组,从而可以被更多的函数和方法使用。
希望这篇文章能够帮助你更好地理解可迭代对象与类数组对象,并能够在你的项目中灵活地使用它们。