前端/移动开发面试题更新 2026-08-05

在 JavaScript 中,for...in 和 for...of 这两种遍历语句分别适用于什么场景?它们在迭代对象、数组以及字符串时的行为有哪些不同?

前端/移动开发技术原理JavaScript

考察说明

考查对 JavaScript 两种遍历语法的理解,包括迭代对象、遍历键值、可迭代协议等核心概念。

回答思路

  1. 【回答框架 1】for...in 用于遍历对象的可枚举属性名,包括继承的可枚举属性,常用于对象键名的遍历,但顺序不保证,且可能遍历到原型链上的属性。
  2. 【回答框架 2】for...of 是 ES6 引入的,用于遍历可迭代对象(如数组、字符串、Set、Map 等)的值,它依赖对象的迭代器协议,不会遍历普通对象的属性。
  3. 【回答框架 3】在遍历数组时,for...of 直接获取数组元素的值,而 for...in 返回的是数组索引(字符串形式),且可能包含其他可枚举属性,因此不推荐用 for...in 遍历数组。
  4. 【回答框架 4】for...in 会枚举对象自身及原型链上的可枚举属性,通常需要配合 hasOwnProperty 过滤;for...of 只能用于实现了迭代器的对象,普通对象不适用,但可以通过 Object.keys 等转换后遍历。
  5. 【回答框架 5】选择建议:遍历对象属性用 for...in 或 Object.keys,遍历数组或类数组等可迭代对象用 for...of,以获得更清晰和安全的语义。
  6. 【关键点 1】for...in 遍历可枚举属性名,包括继承属性;for...of 遍历可迭代对象的值,需要迭代器支持。
  7. 【关键点 2】for...in 不保证顺序,且可能包含原型链上的属性;for...of 按迭代器顺序输出值。
  8. 【关键点 3】数组遍历首选 for...of 获取值,for...in 获取索引且可能有额外属性。
  9. 【易错点 1】用 for...in 遍历数组可能得到非预期属性,如自定义属性或方法,且索引为字符串。
  10. 【易错点 2】普通对象不支持 for...of,除非手动实现迭代器。
  11. 【易错点 3】for...in 会包含继承的可枚举属性,需要 hasOwnProperty 过滤。