MST

星途 面试题库

面试题:JavaScript中可迭代对象的常用遍历方式及区别

请列举JavaScript中可迭代对象(如数组、字符串等)的常用遍历方式,并阐述它们在使用场景、性能以及对迭代器的支持等方面有哪些区别。
33.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

1. for 循环

  • 使用场景:适用于已知循环次数,对数组、类数组对象等进行常规遍历,例如遍历数组获取每个元素的平方。
  • 性能:性能较好,尤其是在现代JavaScript引擎优化后。因为它是最基础的循环方式,没有额外函数调用开销。
  • 对迭代器的支持:不依赖迭代器,通过索引访问元素,可用于非迭代器对象(只要有索引访问方式)。

2. for...of 循环

  • 使用场景:专门用于遍历可迭代对象,如数组、字符串、Set、Map等,简洁地获取可迭代对象的每一个值。例如遍历Set集合获取每个成员。
  • 性能:性能与 for 循环相近,在处理可迭代对象时代码更简洁。
  • 对迭代器的支持:依赖迭代器协议,会自动使用对象的迭代器来遍历,只能用于实现了迭代器协议的对象。

3. for...in 循环

  • 使用场景:主要用于遍历对象的可枚举属性,包括对象自身和继承的可枚举属性。例如遍历一个普通对象,获取所有属性名。
  • 性能:性能相对较差,因为它不仅遍历自身属性,还可能遍历到继承属性,并且每次迭代需要查找原型链。
  • 对迭代器的支持:不依赖迭代器,用于对象属性遍历,不适用于可迭代对象的常规值遍历。

4. forEach 方法

  • 使用场景:适用于数组,对数组每个元素执行相同操作,不需要返回新数组。例如为数组每个元素打印日志。
  • 性能:性能略低于 for 循环,因为每次迭代都有函数调用开销。
  • 对迭代器的支持:不依赖迭代器,仅用于数组,内部通过索引遍历数组。

5. map 方法

  • 使用场景:用于数组,创建一个新数组,其结果是该数组中每个元素都调用一个提供的函数后返回的结果。例如将数组每个元素翻倍得到新数组。
  • 性能:性能略低于 for 循环,同样存在函数调用开销,且要创建新数组。
  • 对迭代器的支持:不依赖迭代器,仅用于数组,内部通过索引遍历数组。

6. filter 方法

  • 使用场景:用于数组,创建一个新数组,其包含通过所提供函数实现的测试的所有元素。例如过滤出数组中的偶数。
  • 性能:性能略低于 for 循环,有函数调用开销且要创建新数组。
  • 对迭代器的支持:不依赖迭代器,仅用于数组,内部通过索引遍历数组。

7. reduce 方法

  • 使用场景:用于数组,将数组元素通过回调函数累计处理为单个值。例如计算数组所有元素之和。
  • 性能:性能略低于 for 循环,有函数调用开销。
  • 对迭代器的支持:不依赖迭代器,仅用于数组,内部通过索引遍历数组。