首先最简单的ES 5的for in遍历对象
let a={
a:100,
b:200
}
for(let key in a)
console.log(key,a[key])
for+Object.keys()方法遍历对象
let a={
a:100,
b:200
}
for(let key of Object.keys(a))
console.log(key,a[key])
for of+Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组
let a={
a:100,
b:200
}
for(let [key,value] of Object.entries(a))
console.log(key,value)
将对象转化为迭代器对象+for of遍历(普通对象不是可迭代对象,所以无法通过for of遍历,否则会报错:Uncaught TypeError: a is not iterable),可以用isIterator()来判断。
要让对象能够被for in遍历,就需要实现Symbol.iterator接口,用ES6 的Generator生成器来给Object添加一个迭代器。
Object.prototype[Symbol.iterator]=function*(){
const arr=Object.entries(this)
const len=arr.length
for(let i=0;i<len;++i){
yield {[arr[i][0]]:arr[i][1]}
}
}
现在就可以直接用for of遍历普通对象啦,结果如下:
当然,污染全局对象是不好的,可以自行封装一个转化指定对象为可迭代对象的方法。