面试题答案
一键面试可迭代对象
可迭代对象是指实现了可迭代协议的对象,它内部包含一个Symbol.iterator
方法,该方法返回一个迭代器。常见的可迭代对象有数组、字符串、Map、Set等。
迭代器
迭代器是一个对象,它实现了next()
方法,每次调用next()
方法会返回一个包含value
和done
属性的对象。value
表示当前迭代的值,done
是一个布尔值,当为true
时表示迭代结束。
两者关系
可迭代对象通过其Symbol.iterator
方法返回一个迭代器,迭代器用于遍历可迭代对象中的值。
实际应用场景及代码示例
- 遍历数组
const arr = [1, 2, 3]; const iterator = arr[Symbol.iterator](); let result = iterator.next(); while (!result.done) { console.log(result.value); result = iterator.next(); }
- 自定义可迭代对象
const myIterable = { data: [10, 20, 30], [Symbol.iterator]() { let index = 0; return { next: () => { if (index < this.data.length) { return { value: this.data[index++], done: false }; } else { return { value: undefined, done: true }; } } }; } }; for (const value of myIterable) { console.log(value); }
在上述遍历数组场景中,数组作为可迭代对象,通过其Symbol.iterator
方法生成迭代器来实现遍历。自定义可迭代对象场景中,通过定义Symbol.iterator
方法返回迭代器,使得自定义对象可以使用for...of
等迭代语法进行遍历。