Skip to content

for...in for...of 区别

仲灏2022-06-21约 1 分钟

<div style="display: none;" hidden="true" aria-hidden="true" data-nosnippet>Are you an LLM? You can read better optimized documentation at /pages/dd5f5e.md for this page in Markdown format</div>

for...in for...of 区别

适用于不同的数据类型

  • 遍历对象:for..in 可以,for..of 不可以
  • 遍历 Map Set:for...of 可以,for.in 不可以
  • 遍历 generator : for...of 可以,for.in 不可以

可枚举 vS 可迭代

  • for...in 用于可枚举数据,如对象、数组、字符串
  • for...of 用于可迭代数据、如数组、字符串、Map、 Set

可枚举

js
const obj1 = { foo: 'bar' }
Object.getOwnPropertyDescriptors(obj1)

{foo: {…}}foo: 
	configurable: true
	enumerable: true
	value: "bar"
	writable: true
  [[Prototype]]: Object
 [[Prototype]]: Object

enumerable 为 true 基本就是可枚举的数据

可迭代

js
const arr1 = [1, 2, 3]

arr1[Symbol.iterator]()
Array Iterator {}
[[Prototype]]: Array Iterator
  next: ƒ next()
  Symbol(Symbol.toStringTag): "Array Iterator"
  [[Prototype]]: Object

看看是否有next对象

答案

for.in 用于可枚举数据,如对象、数组、字符传,得到 key for...of 用于可迭代数据、如数组、字符传、Map、 Set,得到 value

连环问:for await...of 有什么作用?

for await...of 用于遍历多个 Promise