首页 > 其他 > 详细

TypeScript 迭代器与生成器

时间:2020-09-16 12:37:42      阅读:62      评论:0      收藏:0      [点我收藏+]

1. 迭代器与生成器介绍

  迭代器是一种特殊对象,有一个next方法,每次调用next方法,都会返回一个对象,该对象包含 两个属性,一个是value, 表示返回的值。另一个是done,是一个布尔值,用来表示该迭代器是否 还有数据可以返回。

  当一个对象实现了 Symbol.iterator 方法时,我们认为它是可迭代的。

  一些内置的类型,如 Array,Map,Set,String,Int32Array,Uint32Array等都已经实现了各自 的 Symbol.iterator。

  对象上的 Symbol.iterator 函数负责返回供迭代的值,即迭代器。

  生成器是一种特殊的函数,Symbol.iterator 函数就是一个生成器函数,用于创建迭代器。

2. 迭代器与生成器实例

for..of 语句:

let someArray: [number, string, boolean] = [1, "string", false];
for (let entry of someArray) {
    console.log(entry);
}   // => 1, string, false

for..of 与for..in 语句:

let list = [7, 8, 9];
for (let i in list) {
    console.log(i);
}   // => "0", "1", "2",
for (let i of list) {
    console.log(i);
}   // => "7", "8", "9"

for..of 与 for..in 对比实例:

let pets: any = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";
// for..in 可用于查看任何对象的属性
for (let pet in pets) {
    console.log(pet);   // => species
}
// for..of 关注对象的键对应的值
for (let pet of pets) {
    console.log(pet);   // => Cat, Dog, Hamster
}

生成代码实例:

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

// 生成 ES3 或 ES5 时
var numbers = [1, 2, 3];
for (var _i = 0, numbers_1 = numbers; _i < numbers_1.length; _i++) {
    var num = numbers_1[_i];
    console.log(num);
}

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

生成器函数实例:

// 生成器函数
function* foo(x: number) {
    while (x >= 0) {
        yield x;
        x--;
    }
    return;
}
var it = foo(3);
console.log(it.next()); //{ value: 3, done: false }
console.log(it.next()); //{ value: 2, done: false }
console.log(it.next()); //{ value: 1, done: false }
console.log(it.next()); //{ value: 0, done: false }
console.log(it.next()); //{ value: undefined, done: true }

自定义可迭代类型实例:

// 自定义迭代器实例
class SortedArray {
    *[Symbol.iterator]() {
        yield 11;
        yield 12;
        yield 13;
    }
}
const testingIterables = new SortedArray();
for (let item of testingIterables) {
    console.log(item);  // => 11, 12, 13
}

 

TypeScript 迭代器与生成器

原文:https://www.cnblogs.com/JosephWong/p/13678283.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!