JavaScript 可迭代对象

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

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

从技术上讲,可迭代对象必须实[文]现Symbol.iterat[章]or方法。


遍历字符串

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


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

遍历数组

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

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

Javascript 迭代器

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

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

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

value(下一个值)

done(true或fals[,]e)

自制的可迭代对象

这个可迭代对象会无线返回:1[一]0,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 10n.next();   // Returns 20n.next();   // Returns 30

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

Javascript中的可迭[享]代对象是具有Symbol,i[的]terator 属性的对象。

Symbol.iterato[网]r是一个返回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 数组排序

sort() 方法以字母顺序进行排序var  fruits = ["banana", "orange",&qu...

JavaScript 对象访问器

javascript 对象访问器计数器例子var obj = {      counter:0,  &nb...

JavaScript 最新特征

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

JavaScript Set

JavaScript的Set(集合)是一组唯一值的集合。每个值只能在Set中出现一次。Set可以容纳任何数据类型的值。如何创建Set将数组传递给new Set()创建一个新的Set, 然后使用add(...

JavaScript Map

Map 保存键值对,其中键可以是任何数据类型。Map会记住键的原始插入顺序。Map提供表示映射大小的属性。如何创建Map 可以通过以下方式创建Javascript 映射:将数组传递给new...

javascript的重要性

JavaScript在编程中具有以下重要性:前端开发:JavaScript是Web前端开发的基础语言,用于创建动态交互性和用户界面。它可以直接在浏览器中运行,使得开发者可以快速构建和部署Web应用程序...

发表评论

访客

看不清,换一张

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