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

//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] 方法

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • let ,const, varvar :没有作用域一说,且存在作用域提升的问题let const: 只能在当前作用...
    壹点微尘阅读 3,424评论 0 1
  • ECMAScript简称就是ES,你可以把它看成是一套标准,JavaScript就是实施了这套标准的一门语言 现在...
    最美时光A阅读 2,870评论 0 0
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,229评论 0 13
  • 什么是ES6? ECMAScript 6.0 是继ECMAScript 5.1 之后 JavaScript 语...
    多多酱_DuoDuo_阅读 4,868评论 0 4
  • ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manu...
    fastwe阅读 4,991评论 0 2

友情链接更多精彩内容