如何使用of遍历对象

212 阅读1分钟

obj = { a:1, b:2 } for(let k of obj){console.log(k)}
VM77:1 Uncaught TypeError: obj is not iterable at <anonymous>:1:14

只有提供iterator接口的数据类型才能使用of进行遍历;如array、set、map、某些类数组像arguments等数据类型才提供了iterator接口。

解决办法:只要一个数据结构具有Symbol.iterator属性,就会被视为有iterator接口

                 Symbol.iterator 接口其实是一个 Generator 函数

obj = { a:1, b:2 } 
obj[Symbol.iterator] = function* (){
    let keys = Object.keys(obj)
    for(let k of keys){
        yield {
            key: k,
            value: this[k]
        }
    }
}
for(let k of obj){console.log(k)}