for...of和for...in

本文详细介绍了for...of循环的应用范围,包括数组、Set和Map结构等,并对比了for...in循环的不同之处。同时,文章还提供了解决类似数组对象遍历的方法。
  • for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
const arr = ['red', 'green', 'blue'];

for(let v of arr) {
  console.log(v); // red green blue
}
for(let v in arr) {
  console.log(v); // 0 1 2
}
  • for…of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。这一点跟for…in循环也不一样。
  • 并不是所有类似数组的对象都具有 Iterator 接口,一个简便的解决方法,就是使用Array.from方法将其转为数组
let arrayLike = { length: 2, 0: 'a', 1: 'b' };

// 报错
for (let x of arrayLike) {
  console.log(x);
}

// 正确
for (let x of Array.from(arrayLike)) {
  console.log(x);
}

更多介绍戳这里

`for...of` `for...in` 是 JavaScript 中用于循环的两种不同方法,它们的主要区别如下: ### 适用对象 - `for...in` 主要用于遍历对象,也可用于遍历数组,但不推荐。它会遍历对象的可枚举属性,包括对象自身的属性以及继承的属性。在遍历数组时,它遍历的是数组的成员下标(为字符串类型),并且会遍历到数组原型链上的属性。例如: ```javascript let arr = ['a', 'b', 'c']; Array.prototype.ufo = '张三'; for (let item in arr) { console.log(item); } // 输出 0 1 2 ufo ``` - `for...of` 用于迭代可迭代对象定义的要进行迭代的值,可迭代对象包括数组、类数组对象、字符串、Set、Map 以及 Generator 对象等,但不能直接用于普通对象。例如: ```javascript let arr = ['a', 'b', 'c']; for (let item of arr) { console.log(item); } // 输出 a b c ``` ### 遍历内容 - `for...in` 遍历的是对象的键名、数组的成员下标(为字符串类型,不能进行运算,访问的时候都要用【键名】的形式)。 - `for...of` 遍历的是可迭代对象的迭代器(Iterator)返回的值或键值对。 ### 示例:使对象支持 for...of 普通对象默认不可迭代,但可通过实现 `Symbol.iterator` 方法使其支持 `for...of`: ```javascript const obj = { a: 1, b: 2, c: 3, // 实现迭代器方法 [Symbol.iterator]() { const keys = Object.keys(this); let index = 0; return { next: () => { return { value: this[keys[index]], done: index++ >= keys.length }; } }; } }; for (const value of obj) { console.log(value); // 1, 2, 3 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值