⌨️迭代器与生成器
可迭代对象
如果一个对象具有 Symbol.iterator 属性的实现,则该对象被认为是可迭代的。一些内置类型,如Array、Map、String、Int32Array、Unit32Array等Symbol.iterator已经实现了它们的属性。Symbol.iterator对象上的函数负责返回要迭代的值列表。
可迭代接口
Iterable 是我们可以使用的类型,如果我们想要接受上面列出来的可迭代类型:
function toArray<X>(xs: Iterable<X>): X[] {
return [...xs];
}
const list = toArray<string | number | boolean>(["1", 2, true]);for...of语句
for...of遍历可迭代对象,调用Symbol.iterator对象的属性。
let somArray = [1, "string", false];
for (const iterator of somArray) {
console.log(iterator); // 1, "string", false
}for...of与for...in声明
for...of与for...in都可以遍历列表,只是迭代的值不同,for...in返回被迭代对象的键,而for...of返回被迭代对象的属性值。
另外一个区别是for...in可以操作任何对象,for...of主要关心可迭代对象的值。内置的对象如Map和Set实现Symbol迭代器属性,允许访问存储的值。
这有帮助吗?