TypeScript中Iterator和Generator之间的区别

时间:2019-01-28 13:34:58

标签: typescript iterator generator

我需要帮助来区分TypeScript中的迭代器和生成器。

资源链接:https://courses.edx.org/courses/course-v1:Microsoft+DEV273x+1T2019/courseware/d2b1e6e94b0b46528fbff396a486c045/6a959ce8b5cf40c38d3f4f4e0b737603/1?activate_block_id=block-v1%3AMicrosoft%2BDEV273x%2B1T2019%2Btype%40vertical%2Bblock%40994a937b62b746eaadfbf20382b4615b

“迭代器基本上是可以容纳多个项目的对象。迭代器是可以迭代以对集合中的每个项目进行某种处理的对象或变量或项目的集合。数组是迭代器的一个示例。在TypeScript中,如果对象具有Symbol.iterator属性的实现,则认为该对象是可迭代的。 代码示例:

let someArray = [1, "string", false];

for (let entry of someArray) {
    console.log(entry); // 1, "string", false
}

let list = [4, 5, 6];

for (let i in list) {
   console.log(i); // "0", "1", "2", the keys of the array are the indices of its items
}

for (let i of list) {
   console.log(i); // "4", "5", "6"
}

发电机 定位到ES5和ES3 以ES5或ES3为目标时,仅允许对Array类型的值进行迭代。在非数组值上使用for..of循环是错误的,即使这些非数组值实现了Symbol.iterator属性。

编译器将为for..of循环生成一个简单的for循环,例如:

let numbers = [1, 2, 3];
for (let num of numbers) {
    console.log(num);
}

将生成为:

var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++) {
    var num = numbers[_i];
    console.log(num);
}

定位ECMAScript 2015及更高版本 以ECMAScipt 2015兼容引擎为目标时,编译器将生成for..of循环,以针对引擎中的内置迭代器实现为目标。 “

我感到困惑的原因:迭代器和生成器都使用array和for循环作为示例。看来它们在TypeScript中有一定的关系。

有人可以帮助我确定TypeScript中迭代器和生成器之间的区别吗?

0 个答案:

没有答案