for in,for of,Object.keys()

本文详细介绍了JavaScript中的for in、Object.keys和for of三种迭代方式。for in主要用于遍历对象属性,包括数组元素及原型链上的可枚举属性。Object.keys返回对象自身的可枚举属性组成的数组,保持属性顺序。for of是ES6新增的循环语法,适用于遍历数组、类对象、字符串等,但不支持普通对象,需结合Object.keys使用。文中通过示例展示了这三种迭代方式的用法和区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for in

  • for in一般用于遍历对象的属性;
  • 作用于数组的for in除了会遍历数组元素外,还会遍历自定义可枚举的属性,以及原型链上可枚举的属性;
  • 作用于数组的for in的遍历结果是数组的索引,且都为字符串型,不能用于运算;
  • 某些情况下,可能按照随机顺序遍历数组元素;
 Array.prototype.sayLength = function(){
       console.log(this.length);
       }
     let arr = ['a','b','c','d'];
     arr.name = '数组';
     Object.defineProperties(arr,{
           type:{
                    value:true,
                    writable:true,
                    enumerable:true
               }
        });
     for(let i in arr){
         console.log(i);//0,1,2,3,name,type,sayLength
      }

Object.keys()

遍历结果为由对象自身可枚举属性组成的数组,数组中的属性名排列顺序与使用for in循环遍历该对象时返回的顺序一致;
与for in区别在于不能遍历出原型链上的属性;

 Array.prototype.sayLength = function(){
            console.log(this.length);
        }
        let arr = ['a','b','c','d'];
        arr.name = '数组';
        Object.defineProperties(arr,{
            type:{
                value:true,
                writable:true,
                enumerable:true
            }
        });
 var keys = Object.keys(arr);
 console.log(keys);//["0", "1", "2", "3", "name", "type"]

for of

ES6中添加的循环语法;

  • for of支持遍历数组、类对象(例如DOM NodeList对象)、字符串、Map对象、Set对象;
  • for of不支持遍历普通对象,可通过与Object.keys()搭配使用遍历;(见示例二)
  • for of遍历后的输出结果为数组元素的值;
  • 搭配实例方法entries(),同时输出数组内容和索引;(见示例三)

示例一:

Array.prototype.sayLength = function(){
 console.log(this.length);
 3}
 let arr = ['a','b','c','d'];
 arr.name = '数组';
 Object.defineProperties(arr,{
 type:{
       value:true,
       writable:true,
       enumerable:true
      }
});
 for(let i of arr){
     console.log(i);//a,b,c,d
 }

示例二:

var person={
    name:'coco',
    age:22,
    locate:{
        country:'China',
        city:'beijing',
    }
}
for(var key of Object.keys(person)){
    //使用Object.keys()方法获取对象key的数组
    console.log(key+": "+person[key]);//name: coco,age: 22,locate: [object Object]
}

示例三:

let arr3 = ['a', 'b', 'c'];
         for (let [index, val] of arr3.entries()) {
             console.log(index + ':' + val);//0:a 1:b 2:c
         }

PS:让jquery对象支持for of遍历

// 因为jQuery对象与数组相似
// 可以为其添加与数组一致的迭代器方法
jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];

forEach(ES5,但是它不支持使用break、continue和return语句)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值