JS for in和for of区别

528 阅读1分钟

for in 和 for of区别

  • for in 是ES5标准

    • 可以遍历数组和对象

    • 遍历的索引是字符串类型

      • 因为通常遍历的时候,要对索引进行算术操作,如果是字符串还需要转换成数值类型,不太方便
    • 遍历顺序可能不是按照数组顺序的(随机顺序

    • 使用for in会遍历出数组/对象所有的可枚举属性,包括原型

      for in 更适合遍历对象,不要用 for in 遍历数组

  • for of是ES6标准

    • for of 可以简单正确的遍历数组(不遍历原型)

    • 不能遍历对象

    • 因为能够被for...of正常遍历的,都需要实现一个迭代器Iterator。而数组、字符串、Set、Map结构,早就内置好了Iterator(迭代器),它们的原型中都有一个Symbol.iterator方法,而Object对象并没有实现这个接口,使得它无法被for...of遍历

      • Map

      • Set

      • String

      • Array

      • Arguments

      • 判断是否有迭代能力

          Array.prototype.hasOwnProperty(SYmbol.iterator)
        

总结

  • for in可以遍历数组和对象,for of不能遍历对象
  • for...in 不仅遍历出数字键名,还会手动遍历其它的键,甚至包括原型链上的键
  • for..in遍历的索引为字符串类型
  • for..of可以响应break,continue和return语句