栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

iterator原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

iterator原理

Iterator是一种接口机制,为各种不同的数据结构提供统一的访问(循环)机制, 遍历器, 因为现在有Array / Object /Set / Map / String / NodeList / HTMLCollection / Arguments 等结构, 所以ES6 加入了Iterator遍历器, 只要拥有这个Iterator遍历器, 就都可以使用for...of进行遍历.

1.作用
  • 为各种数据结构,提供一个统一的、简便的访问接口

  • 使得数据结构的成员能够按某种次序排列

  • ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of使用

  • Iterator是一个抽象的概念, 具体的实现 for...of / Symbol.iterator

只要可遍历的数据结构的原型上有 Symbol.iterator属性,则此数据就可以使用for...of进行遍历。唯独Object没有。  

2.for...of 基本使用
let str = "ABCDEFG";
let datas = {}
for (let i of str) {
    datas[i] = [];
}
console.log(datas);

let arr = ["妲己", "貂蝉", "小乔", "安其拉"];
for (let i of arr) {
    console.log(i);//"妲己","貂蝉","小乔","安其拉"
}
3.for...of原理
//原理
let arr = ["妲己", "貂蝉", "小乔", "安其拉"];
// console.log(arr);
// Symbol.iterator()本身是一个函数,调用后的结果是一个对象,而且这个对象的原型链上有next()方法
let it = arr[Symbol.iterator]();//
console.log(it.next());//{value: '妲己', done: false}
console.log(it.next());//{value: '貂蝉', done: false}
console.log(it.next());//{value: '小乔', done: false}
console.log(it.next());//{value: '安其拉', done: false}
console.log(it.next());//{value: undefined, done: true}
4.对对象部署iterator接口
// 为对象部署Symbol.iterator
Object.prototype[Symbol.iterator] = function () {
    let values = Object.values(this);//["妲己",20,"女"]
    let i = 0;
    return {
        next() {
            if (i < values.length) {
                return { value: values[i++], done: false }
            } else {
                return { value: undefined, done: true }
            }
        }
    }
}

let obj = {
    name: "妲己",
    age: 20,
    sex: "女"
}
for(let i of obj){
    console.log(i);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号