资讯专栏INFORMATION COLUMN

Iterator 和 for..of vs for...in

ThreeWords / 1693人阅读

摘要:迭代器遍历器提高访问具有遍历借口数据的效率相当于指针默认是可遍历借口有方法将当前指针移动到下个位置,返回一个对象数组默认有迭代器属性可以用在数组类数组类似于数组类数组自定义遍历器普通循环遍历迭代器遍历遍历遍历用来遍历对象

Iterator迭代器(遍历器) 提高访问具有遍历借口数据的效率 相当于指针(默认是-1); 可遍历借口 有next方法(next将当前指针移动到下个位置,返回一个对象{value:,done:}) 数组默认有迭代器属性
    var arr = [111,222,333];
    var aa = arr[Symbol.iterator]();
    aa.next(); // { value: 111, done: false }
    aa.next(); // { value: 222, done: false }
    aa.next(); // { value: 333, done: false }
    aa.next(); // { value: undefined, done: true }
可以用在 数组 Map Set 类数组
    var m = new Set([11,22,33]);//set类似于数组
    console.log(m);
    var qq=m[Symbol.iterator]();
    console.log(qq.next());//{value: 11, done: false}
    var s = new Map([["name","shi"],["age",3]]);
    s.set("sex","nv")
    console.log(s);
    var i=s[Symbol.iterator]();
    console.log(i.next());
类数组
    var try=document.getElementsByName("div");
    console.log(try);
自定义遍历器
    var arr = [111,222,333];
    function aa(arr){
    var i=-1;
    function next(){
        i++;
        let value;
        let done=false;

        if (i==arr.length) {
            value=undefined;
            done=true;
        }else{
            value=arr[i];
        }
        return{value:value,done:done};
    }
    return {next:next};
}

    var zz=aa(arr); 
    console.log(zz.next());//Object {value: 111, done: false}
    console.log(zz.next());//Object {value: 222, done: false}
    console.log(zz.next());//Object {value: 333, done: false}
    console.log(zz.next());//Object {value: undefined, done: true}
    
for..of vs for...in 普通循环遍历
var arr=[1,2,3,4,5,6];
for (var i = 0, l = arr.length; i{
    console.log(i);
})
迭代器遍历
var bb=arr[Symbol.iterator]();
var cc=bb.next();
while(!cc.done){
    console.log(cc.value);
    cc=bb.next();
}
for of array 遍历
for(var item of arr){
    console.log(item);
} 
for of set 遍历
var s=new Set(["a","b","c"]);
for(var item  of s){
    console.log(item);
}
for in 用来遍历对象
// 
var obj={
    x:1,y:2,z:3
}
for(var i in obj ){
    console.log(i)//x,y,z
    console.log(obj[i]);//x 1 y 2 z 3
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88331.html

相关文章

  • 一文彻底弄懂 for forEach for-in for-of 的区别

    基本语法 下面列出了这几个遍历语法规则: for (let index = 0; index < array.length; index++) { const element = array[index] // ... } array.forEach(element => { // ... }) for (const key in array) { // ......

    newsning 评论0 收藏0
  • Iterator for...of 循环

    摘要:和循环遍历器意义为四种数据集合,提供统一的接口机制来处理所有不同的数据结构。调用函数返回一个遍历器对象,代表函数的内部指针。以后,每次调用遍历器对象的方法,就会返回一个有着和两个属性的对象。 Iterator 和 for...of 循环 Iterator(遍历器)意义 为Array、Object、Map、Set四种数据集合,提供统一的接口机制来处理所有不同的数据结构 。 任何数据结构,...

    Drinkey 评论0 收藏0
  • for ...offor... in

    摘要:也就是说,遍历器对象本质上,就是一个指针对象。规定,默认的接口部署在数据结构的属性,或者说,一个数据结构只要具有属性,就可以认为是可遍历的属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。 for...in遍历对象的属性或数组索引(ES5) eg1:遍历数组 var arr=[a,b,c,d]; for(let index in...

    lijinke666 评论0 收藏0
  • 我们不一样:for...offor...in

    摘要:定义两者都是遍历的方法,最先能想到的区别是,前者是遍历键名,后者是遍历键值。一种数据结构只要部署了接口,就称之为可遍历的。中提供了一些具备原生接口的数据结构包括函数的对象对象。 定义 两者都是遍历的方法,最先能想到的区别是,前者是遍历键名,后者是遍历键值。看一下两者的定义: for...in 遍历当前对象的所有可枚举属性(包括自有属性,从原型继承的属性),遍历顺序是无序的 for.....

    Imfan 评论0 收藏0
  • ES6语法之可迭代协议迭代器协议

    摘要:有两个协议可迭代协议和迭代器协议。为了变成可迭代对象,一个对象必须实现或者它原型链的某个对象必须有一个名字是的属性迭代器协议该迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值。 ECMAScript 2015的几个补充,并不是新的内置或语法,而是协议。这些协议可以被任何遵循某些约定的对象来实现。有两个协议:可迭代协议和迭代器协议。 可迭代协议 可迭代协议允许 JavaScri...

    sarva 评论0 收藏0

发表评论

0条评论

ThreeWords

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<