面试题7:for…in与for…of的区别

本文深入解析JavaScript中for...in与for...of循环的区别与应用场景。详细介绍了如何使用这两种循环遍历数组、对象及具备迭代接口的数据结构,同时探讨了它们在键名与值获取上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栗子1:遍历数组

	  const arr1 = ['a', 'b', 'c'];
	  for (let i in arr1) {
	    console.log(i)  // 0, 1, 2
	  }
	  
	  const arr2 = ['a', 'b', 'c'];
	  for (let i of arr2) {
	    console.log(i) // a, b, c
	  }

for in 返回数组的下标(key);
for of 返回数组的元素;
………………………………………………………………………………………………………………………………………………
栗子2:给数组手动添加属性

   const arr3 = ['a', 'b'];
  arr3.name = 'c';
  for (let i in arr3) {
    console.log(i) // 0, 1, name
  }

for in 循环可以遍历出name这个键名
………………………………………………………………………………………………………………………………………………
栗子3:遍历对象

  const json = {"a": 1, "b": 2, "c": 3};
  for (let i in json) {
    console.log(i) // a, b, c
  }
  for (let i of json) {
    console.log(i)
  }

在这里插入图片描述
for in遍历获取对象key值;
for of 报错;
………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………
for in 的特点
for … in 循环返回的值都是数据结构的 键值名。
遍历对象返回的对象的key值;
遍历数组返回的数组的下标(key)。

for … in 循环不仅可以遍历数字键名,还会遍历原型上的key值和手动添加的其他键;

特别情况下, for … in 循环会以任意的顺序遍历键名

总结一句: for in 循环特别适合遍历对象
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
for of 特点
for of 循环用来获取一对键值对中的值,而 for in 获取的是 键名

一个数据结构只要部署了 Symbol.iterator 属性, 就被视为具有 iterator接口, 就可以使用 for of循环。

例3这个对象,没有 Symbol.iterator这个属性,所以使用 for of会报json is not iterable

for of 不同与 forEach, 它可以与 break、continue和return 配合使用,也就是说 for of 循环可以随时退出循环。

提供了遍历所有数据结构的统一接口;
……………………………………………………………………………………………………………………………………………………
哪些数据结构部署了 Symbol.iteratoer属性了呢?
只要有 iterator 接口的数据结构,都可以使用 for of循环。

数组 Array
Map
Set
String
arguments对象
Nodelist对象, 就是获取的dom列表集合
以上这些都可以直接使用 for of 循环。 凡是部署了 iterator 接口的数据结构也都可以使用数组的 扩展运算符(…)、和解构赋值等操作。
……………………………………………………………………………………………………………………………………
我也想让对象可以使用 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属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值