JavaScript 可迭代对象

admin2年前 (2023-07-07)it知识446

可迭代对象时可以使用for..of 进行迭代的对象

从技术上讲,可迭代对象必须实现Symbol.iterator方法。


遍历字符串

你可以使用for..of循环来遍历字符串的元素:


for(const x of "W3School") {
   // 要执行的代码块
}

遍历数组

你可以使用for..of 循环遍历数组中的元素:

for(const x of [1,2,3,4,5]) {
       //要执行的代码块
}

Javascript 迭代器

迭代器协议定义了如何从一个对象中生成一系列的值。

当一个对象实现了next() 方法时,它就成为了一个迭代器。

next()方法必须返回一个带有两个属性的对象:

value(下一个值)

done(true或false)

自制的可迭代对象

这个可迭代对象会无线返回:10,20,30,40......当每次调用next()时:


function myNumbers() {
     let n = 0;
     return {
           next: function() {
                n += 10;
                return { value: n, done: false };
           }
     };
}
const n = myNumbers();
n.next();   // Returns 10
n.next();   // Returns 20
n.next();   // Returns 30

这里的可迭代对象存在问题,它不支持Javascript 中的for..of语句。

Javascript中的可迭代对象是具有Symbol,iterator 属性的对象。

Symbol.iterator是一个返回next 函数的函数。

可以使用一下代码迭代可迭代对象: for (const x of iteralbe){  }

myNumbers = {};  // 创建对象
//使其可迭代
myNumbers[Symbol.iterator] = function(){
   let n = 0; 
   done = false;
   return {
     next(){
       n += 10;
       if(n == 100){ done = true }
       return { value: n, done: done };
     }
   };
}

现在可以使用for .. of 了:

for (const num of myNumbers) {
   //这里可写任何代码
}

Symbol.iterator 方法会被for..of 自动调用。

我们也可以手动调用它:

let iterator = myNumbers[Symbol.iterator]();
while(true) {
    const result= iterator.next();
    if(result.done) break;
    // 这里可写任何代码
}


标签: JavaScript

相关文章

JavaScript 字符串模板

模板字面量使用反引号(``)而不是引号("")来定义字符串:比如:let text = `Hello World`;使用模板字面量,可以在字...

JavaScript 对象原型

前面有一章提到无法为已有的对象构造器添加新属性Person.nationality = "English";  //得到的是undefine...

JavaScript 最新特征

JavaScript 的最新特征包括以下几个方面:类的私有变量:通过使用 # 符号,可以在类中定义私有变量,只能在类的内部访问,外部无法访问。空位合并操作符:使用 ?? 符号,可以在两项中任一项为 n...

vue-router导航守卫

vue-router的导航守卫可以用来在路由跳转过程中添加自定义逻辑,例如验证、权限控制、重定向等。导航守卫可以分为三种:全局导航守卫、路由独享守卫和组件内的守卫1。全局导航守卫可以使用router....

vue 的重要性

Vue是一套用于构建用户界面的渐进式框架,具有以下优点:易用:学习曲线平缓,api简洁,容易上手。灵活:可以嵌入到现成的服务端框架中,带来更加丰富的交互系统。高性能:基于虚拟DOM,低耦合,可重用,独...

长轮询

长轮询

长轮询是与服务器保持持久连接的最简单的方式,它不使用任何特定的协议,例如 WebSocket 或者 Server Sent Event。它很容易实现,在很多场景下也很好用。从服务器获取新信息的最简单的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。