JavaScript里迭代器的定义和使用

1.迭代器定义

用于对于一个对象或内建对象里每个属性的迭代。简单说就是遍历 可迭代 对象用的。
可迭代 是指可在for … of … 这个语法结构中遍历

下面是迭代器在JS中实现的原理:

let range = {
  from: 1,
  to: 5
};

// 1. for..of 调用首先会调用这个:
range[Symbol.iterator] = function() {
  // ……它返回迭代器对象(iterator object):
  // 2. 接下来,for..of 仅与下面的迭代器对象一起工作,要求它提供下一个值
  return {
    current: this.from,
    last: this.to,
    // 3. next() 在 for..of 的每一轮循环迭代中被调用
    next() {
      // 4. 它将会返回 {done:.., value :...} 格式的对象
      if (this.current <= this.last) {
        return { done: false, value: this.current++ };
      } else {
        return { done: true };
      }
    }
  };
};

// 现在它可以运行了!
for (let num of range) {
  alert(num); // 1, 然后是 2, 3, 4, 5
}

[Symbol.iterator] 这个方法被称为迭代器

在上面例子中它把 range 对象变成了一个可迭代对象(意思是说本来是不能用for…of…遍历这个对象,现在可以了)。

它让我们可以自定义每次遍历的返回值:value: this.current++ ,在for … of … 遍历中用 num接收这个返回值,只要 num <= 5,就会一直遍历

而自定义迭代器的话可以让我们为遍历中的实体添加条件。例如,我们可以拆分迭代过程:迭代一部分,然后停止,做一些其他处理,然后再恢复迭代

内建的迭代器是只返回每个对象实体,比较难理解的话看下 面例子吧。

2.迭代器作用

因为很多JS 关于数据的定义中,比如Map ,Set,可迭代对象,数组,字符串等等都拥有可迭代特性。意味着我们可以用for…of …遍历它们。

字符串例子:

let str = '𝒳😂';
for (let char of str) {
    alert( char ); // 𝒳,然后是 😂
}

对于字符串来说,一个 Char 就是它的一个实体。
数组:

let arrayLike = [
    ['cucumber', 500],
    ['tomatoes', 350],
    ['onion',    50]
  ]
  
  // Error (no Symbol.iterator)
  for (let item of arrayLike) {
    console.log(item)  //['cucumber', 500],then  ['tomatoes', 350] ,then ['onion',50]
  }

对于这个二维数组来说,每个数组就是一个实体

Set:

let set = new Set();

let john = { name: "John" };
let pete = { name: "Pete" };
set.add(john);
set.add(pete);
for (let user of set) {
  alert(user.name); // John(然后 Pete)
}

等等。。。。不再举例了,自己试试其他的吧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值