js for in 和 for of

for in

  1. 遍历 对象 得到其 键值
    包括非整数类型的名称和继承的那些原型链上面的属性也能被遍历
  2. 属性需要具有 enumerable
    为什么不推荐使用for in

for in 会遍历出原型上的方法

  1. 类型改变:遍历出的属性值是字符串,而不是原本类型,如数字
  2. 遍历原型:遍历的是对象的枚举属性,包括自身属性以及原型链上的属性
  3. 顺序不明:遍历顺序是对象属性的枚举顺序,并不一定按数组的下标顺序遍历

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 属性

你可能感兴趣的:(#,JavaScript,javascript,ecmascript)