You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
除了迭代器之外,我们还需要一个可以遍历迭代器对象的方式,ES6 提供了 for of 语句,我们无法直接用 for of 遍历对象,需要部署了 Iterator 接口“可遍历的”(iterable)对象,for of 遍历的其实是对象的 Symbol.iterator 属性。如:
varo={value: 1};for(valueofo){console.log(value);// Uncaught TypeError: o is not iterable}// 给该对象添加 Symbol.iterator 属性o[Symbol.iterator]=function(){returncreateIterator([1,2,3]);};for(valueofo){console.log(value);}// 1// 2// 3
functionforOf(obj,cb){letiterable,result;if(typeofobj[Symbol.iterator]!=="function")thrownewTypeError(result+" is not iterable");if(typeofcb!=="function")thrownewTypeError("cb must be callable");iterable=obj[Symbol.iterator]();result=iterable.next();while(!result.done){cb(result.value);result=iterable.next();}}
ES6 系列之迭代器与 for of
所谓迭代器,其实就是一个具有 next() 方法的对象,每次调用 next() 都会返回一个结果对象,该结果对象有两个属性,value 表示当前的值,done 表示遍历是否结束。
用 ES5 的语法创建一个迭代器:
除了迭代器之外,我们还需要一个可以遍历迭代器对象的方式,ES6 提供了 for of 语句,我们无法直接用 for of 遍历对象,需要部署了 Iterator 接口“可遍历的”(iterable)对象,for of 遍历的其实是对象的
Symbol.iterator
属性。如:所以,优化下 createIterator:
一些数据结构默认部署了 Symbol.iterator 属性:
模拟实现 for of:
ES6 为数组、Map、Set 集合内建了以下三种迭代器:
[键名, 键值]
组成的数组。对于数组,键名就是索引值。Map 类型与数组类似,Set 类型的 keys() 和 values() 返回的是相同的迭代器,这也意味着在 Set 这种数据结构中键名与键值相同。
原文链接:ES6 系列之迭代器与 for of
The text was updated successfully, but these errors were encountered: