js for in 和 for of
for in
- 遍历 对象 得到其 键值
包括非整数类型的名称和继承的那些原型链上面的属性也能被遍历 - 属性需要具有
enumerable
为什么不推荐使用for in
for in 会遍历出原型上的方法
- 类型改变:遍历出的属性值是字符串,而不是原本类型,如数字
- 遍历原型:遍历的是对象的枚举属性,包括自身属性以及原型链上的属性
- 顺序不明:遍历顺序是对象属性的枚举顺序,并不一定按数组的下标顺序遍历
for of
被设计用于遍历数组
一个数据结构只要部署了 Symbol.iterator 属性, 就被视为具有 iterator 接口, 就可以使用 for of 循环。
使对象可进行 for of 方法:
Object.entries(obj) // 返回 可遍历 键值对 数组
Object.keys(obj) // 返回 可遍历 键 数组
Object.values(obj) // 返回 可遍历 值 数组
让一般对象使用 for of 的方法:
方法一: 使用 Object.keys() 获取对象的 key值集合后,再使用 for of
const obj = {a: 'x', b: 'y'};
for (let i of Object.keys(obj)) {
console.log(i) // a, b
}
方法二: 给一个对象添加 Symbol.iterator 属性
内容会不断更新,欢迎批评指正。

浙公网安备 33010602011771号