迭代 for ...in 和 for ...of

2018-12-26  本文已影响0人  famingng

//for ...in 以原始插入的顺序迭代对象的可迭代属性

let arr = [1,2,3];

var obj = {

name:'ldm',

age:20

}

// for (var key in arr){

// console.log(key)//0,1,2

// console.log(arr[key])//1,2,3

// }

for(var key in obj){

console.log(key)//name,age

console.log(obj[key])//'ldm',20

}

二、for...of  根据迭代对象的迭代器具体实现迭代对象数据

  迭代器:具体的迭代实现逻辑

  迭代对象:可被迭代的对象——[Symbol.iterator] 方法

for(var key of arr){

console.log(key)//1,2,3----这里的key是arr的值

}

var obj = {

   name:'ldm',

   age:20

}

for(var key of obj){

console.log(key)//报错,因为这里obj没有[Symbol.iterator] 方法

}

自定义迭代器

var obj = {

    name:'ldm',

    age:20

}

obj[Symbol.iterator] = function(){

  let keys = Object.keys(obj)//返回值是一个数组[]

  let len = keys.length;

  console.log(keys)

  let n = 0;

  return{

   next(){

      if(n<len){

         return {

            value:keys[n++],//obj的key的值

            done:false,//为true则不再迭代

         }

    }else{

        return {

          value:'',

          done:true,

        }

   }

  }

 }

}

for(var key of obj){

   console.log(key)//报错,因为这里obj没有[Symbol.interator] 方法

}

上一篇 下一篇

猜你喜欢

热点阅读