首先最简单的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遍历普通对象啦,结果如下:

当然,污染全局对象是不好的,可以自行封装一个转化指定对象为可迭代对象的方法。
本文介绍了三种在JavaScript中遍历对象的方法:for...in、结合Object.keys()以及Object.entries()的for...of循环。还探讨了如何使普通对象变得可迭代,通过实现Symbol.iterator接口,并提供了一个自定义函数将其转化为可迭代对象。这种方法允许使用for...of直接遍历对象,避免污染全局对象。

479

被折叠的 条评论
为什么被折叠?



