【ES6】for, for in , for of

for循环

    for (let index = 0; index < array.length; index++) {
        const element = array[index];            
    }

for in

  1. for in 遍历数组
    // for in 遍历数组的每个下标
    for (const index in array) {
        const element = array[index]    // 拿到数组中的每一项进行操作
    }
  1. for in 遍历对象
    // for in 遍历对象中的每个key
    // 对象object的属性访问器有点号.和方阔括号[]两种
    for (let key in object) {
        const element = object[key]     // 拿到对象中的每一个键key对应的值value
    }
  1. for in 会遍历到对象上的原型方法,如果不想遍历原型方法和属性值,可以在循环内部判断一下,hasOwnPropery方法可以判断某属性是否是该对象的实例属性
    for (let key in object) {
        if (Object.hasOwnProperty.call(object, key)) {
            const element = object[key];
        }
    }


for of

for of 遍历数组

具备iterator接口的数据:Array,Arguments,Set,Map,String,TypedArray,Nodelist

只有有iterator接口的数据,才能使用for of遍历,Object是不行的。

    // for of 遍历数组的迭代器
    for (let iterator of array) {
        // 数组中每个迭代器就是数组中的每一项
        const element = iterator        // 拿到数组中的每一项进行操作
    }

总结

使用for in会遍历数组所有的可枚举属性,包括原型。例如原型方法method和name属性

所以for in更适合遍历对象,不要使用forin遍历数组。当不希望遍历对象原型的方法和属性时使用hasOwnPropery判断一下

for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句

for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环或使用Object.keys()方法:

posted @ 2022-04-30 22:26  wanglei1900  阅读(270)  评论(0编辑  收藏  举报