首页 > 其他分享 >for in 与 for of的用法

for in 与 for of的用法

时间:2023-09-13 13:22:59浏览次数:46  
标签:遍历 obj 迭代 对象 用法 let 数组

for in与for of的区别

  • 使用for of遍历的内容必须要有迭代器
  • for in一般用于遍历对象也可以遍历数组,遍历的是对象的属性或者数组的下标,for of一般用于遍历数组,map,set等,它不能遍历对象 因为对象身上没有迭代器
  • for in一般遍历的是key,for of一般遍历的是value

如果非要用for of 遍历对象 以下有可参考的方法

 // 创建一个数组  数组具有迭代器
        const array = [1,2,3] 
        // 创建一个对象
        let obj = {
            name: "张三",
            age: 17
        }

        // 打印数组  数组原型中有迭代器的属性
        // console.dir(array);
        // console.log(Array.prototype[Symbol.iterator]);


        /* 一种行不通的方法 */

        // 将数组的迭代器拷贝到对象中
        obj.__proto__[Symbol.iterator] = Array.prototype[Symbol.iterator]
        // 此时obj的原型空间中有迭代器
        for (let val of obj) {
                console.log(val);
        }
        // 结果是不报错的 但是并不能遍历出数据 因为对象和数组的底层是不一样的  不能数组的迭代器去遍历对象
 // 创建一个数组  数组具有迭代器
        const array = [1,2,3] 
        // 创建一个对象
        let obj = {
            name: "张三",
            age: 17
        }
        /* 方法一 */
        /*
            Object.keys => 将对象里面的所有key值取出来
            Object.values => 将对象里面的所有value取出来 
         */

        //  本质是将对象的value值取出放入数组 将数组用for of 遍历
         for(let val of Object.values(obj)){
            console.log(val);
         }
 // 创建一个对象
 let obj = {
     name: "张三",
     age: 17
 }
//  手动创建对象的迭代器
 obj[Symbol.iterator] = function () {
       const _this = this
       //也可使用: keys = Object.getOwnPropertyNames(this)
       const keys = Object.keys(this)
       let index = 0
          return {
            next() {
               return {
                   value: _this[keys[index++]],
                   done: index > keys.length
              }
           }
        }    
    }
}

 for (let val of obj) {
      console.log(val);
 }

参考文章:JS中让对象支持for...of遍历

标签:遍历,obj,迭代,对象,用法,let,数组
From: https://www.cnblogs.com/bingMIN/p/17699380.html

相关文章

  • VIM 零宽度(断言)匹配用法示例
    1.零宽度向左匹配(零宽度字符)@<=目标字符示例:查找左边是”ses“的字符“s” 2.零宽度向右匹配目标字符(零宽度字符)@=示例:查找右边是”isi“的字符”s“ ......
  • Vue~vue3-sfc-loader用法
    1.vue2-sfc-loader版本参考这个:(vue2&vue2-sfc-loader)https://article.juejin.cn/post/72369546129882972742.vue3-sfc-loader版本的基础写法:(vue3&vue3-sfc-loader)<template><div><component:is="data.remote"v-if="data.remote&q......
  • Python使用 - NumPy用法1
    NumPy的核心数据结构之一是ndarray,表示一个多维数组,他存储的是单一数据类型。 导入包importnumpyasnp 1维数组list1=[1,2,3,4,5,6]ndarr1=np.array(list1,dtype=np.float32)print(type(ndarr1),ndarr1)#<class'numpy.ndarray'>[1.2.3.4.5.6.]......
  • stl--<map>的用法
    Themostfrequentnumber第一行输入n(n<1000000);第二行输入n个数,找出出现次数最多的数,入不只有一个答案,输出最小的答案;例:输入:6122235输出:2用的#include<map>,按键值(第一个数的值)排序,主要有:定义:map<int,float>m;......
  • C#中Math.Round(指定四舍五入)、Math.Ceiling和Math.Floor的用法
    1.Math.Round:四舍六入五取偶Math.Round(17.475728155339805,2,MidpointRounding.AwayFromZero)=17.48Math.Round(0.0)//0Math.Round(0.1)//0Math.Round(0.2)//0Math.Round(0.3)//0Math.Round(0.4)//0Math.Round(0.5)//0Math.Round(0.6)//1Math.Round(0.7)//1Math.Roun......
  • Oracle over(partition by) 用法
    语法与说明selectAAA,序号函数over(partitionbyBBBgroupbyCCC)fromtable;select后面跟什么字段随便。序号函数有多种,类似row_number()等。partitionby后面跟的字段实际是分组字段,与groupby后面跟的字段类似。再之后的order字段,就是分组后排序。序号函数说明......
  • realloc() 用法详解
    在开发过程中我们经常要动态地进行内存分配,而内存的管理是一个重要的问题。在C语言中,内存分为四个区域:堆区,栈区,全局/静态存储区和常量存储区。其中,堆区用于动态内存分配。在C标准库中,主要有两个函数用于动态内存分配,分别是malloc()和realloc()。malloc()函数malloc()函数在堆内......
  • Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法
    Unity性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法点击封面跳转下载页面简介Unity性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法在Unity开发中,性能优化是一个非常重要的方面。一个常见的性能优化技巧是使用ShaderUtil.GetSha......
  • Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法
    Unity性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法点击封面跳转下载页面简介Unity性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法在Unity开发中,性能优化是一个非常重要的方面。一个常见的性能优化技巧是使用ShaderUtil.GetSh......
  • 你真的掌握了python列表用法吗
       列表是python语言中最常用的的数据类型,理解和运用好列表用法对开发工作至关重要。下面列举部分代码,请对照输出结果检验一下结合使用print语句操作列表数据的熟练程度吧。   使用print语句输出列表内容代码li=['我们','中国人民','秦国','赵国']print('例一:#编号......