返回
ES6 中的 Iterator(遍历器)与 for of 循环 - 一个深层探索
前端
2023-10-26 06:24:54
Iterator 接口是一种允许遍历对象元素的标准方法。它定义了两个方法:next()
和 Symbol.iterator
。next()
方法返回一个包含当前元素和 done
属性的对象,done
属性指示遍历是否已完成。Symbol.iterator
方法返回一个初始指向第一个元素的迭代器对象。
for of 循环是 ES6 中引入的一种新的循环结构,它使用 Iterator 接口来遍历数据结构。for of 循环的语法如下:
for (const element of iterable) {
// 在这里处理每个元素
}
iterable 是一个具有 Symbol.iterator
方法的对象,例如数组、字符串、Set 和 Map。for of 循环将自动调用 Symbol.iterator
方法来获取迭代器对象,然后使用 next()
方法遍历该对象中的元素。
Iterator 接口和 for of 循环在许多场景中都有应用,例如:
- 遍历数组或字符串:
const numbers = [1, 2, 3, 4, 5]; for (const number of numbers) { console.log(number); // 输出: 1 2 3 4 5 }
- 遍历 Set 或 Map:
const set = new Set([1, 2, 3, 4, 5]); for (const number of set) { console.log(number); // 输出: 1 2 3 4 5 }
- 遍历对象:
const person = { name: 'John Doe', age: 30, city: 'New York' }; for (const key of Object.keys(person)) { console.log(key); // 输出: name age city }
- 生成器函数:
生成器函数是一种特殊类型的函数,它可以暂停执行并返回一个值,然后在以后继续执行。生成器函数使用yield
来实现暂停和返回。function* fibonacci() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, a + b]; } } const fib = fibonacci(); console.log(fib.next().value); // 输出: 0 console.log(fib.next().value); // 输出: 1 console.log(fib.next().value); // 输出: 1
ES6 中的 Iterator 接口和 for of 循环提供了更简洁、更强大的遍历方式。Iterator 接口允许我们遍历对象元素,而 for of 循环则使用 Iterator 接口来遍历数据结构。Iterator 接口和 for of 循环在许多场景中都有应用,包括遍历数组、字符串、Set、Map 和对象。