for in和for of区别

一、for in遍历数组的问题
1、index索引为字符串类型,不能直接进行几何运算
2、遍历顺序可能不是按照实际数组的顺序
3、会遍历数组所有的可枚举属性,包括原型

Array.prototype.method = function () {
            console.log(this.length);
        }
        var myArray = [1, 2, 4, 5, 6, 7]
        myArray.name = "数组";
        for (var key in myArray) {
            console.log(key, myArray[key]);
        }
        for (var value of myArray) {
            console.log(value);
        }

for in遍历的是数组的索引,for of遍历的是数组元素值。
在这里插入图片描述
二、遍历对象
遍历对象通常使用for in

 Object.prototype.method = function () {
            console.log(this);
        }
        var myObject = {
            a: 1,
            b: 2,
            c: 3
        }
        for (var key in myObject) {
            console.log(key);
        }```
for in 可以遍历到原型对象上的方法,如果不想遍历原型对象上的方法和属性,需要在循环内部判断一下。hasOwnProperty方法可以判断某属性是否是该对象的实例属性

```javascript
for (var key in myObject) {
            if (myObject.hasOwnProperty(key)) {
                console.log(key);
            }
        }
       

在这里插入图片描述
三、for of特点
1、for of不可以遍历对象,但是可以通过以下方法遍历对象:使用Object.keys()获取对象的key值集合后,再使用for of

 const obj = {
        a: 1,
        b: 2,
        c: 3
    }

    for (let i of Object.keys(obj)) {
        console.log(i)
        // 1
        // 2
        // 3
    }

2、一个数据结构只要部署了Symbol.iterator属性,就可以使用for of
具有for of的数据结构有:Array,Map,Set,String,arguments对象,Nodelist对象(获取的dom列表集合)。
3、与forEach不同,for of可以正确响应break,continue,return语句

四、JS数组遍历
1、for循环
2、forEach()
数组自带的循环,主要用于遍历数组。缺点是不能使用break语句中断循环,也不能使用return语句返回到外层函数。
3、map() 用法与forEach()相似,缺点是不能使用break语句中断循环,也不能使用return语句返回到外层函数,但是可以返回值。

arr = [2, 3, 4, 5]
        arr.forEach(function (value, i) {
            console.log('forEach循环:' + i + '--' + value)
        })
        arr.map(function (value, i) {
            console.log('map:' + i + '--' + value)
        })
        var temp = arr.map(function (val, index) {
            console.log(val);
            return val * val
        })
        console.log(temp);

在这里插入图片描述

转载于:https://www.cnblogs.com/zjx304/p/10687017.html 仅用于学习,侵删

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值