for of和for in的区别
for...of 和 for...in 是 JavaScript 中两种不同的循环结构,它们在遍历对象和数组时有不同的用途和行为:
- for...of 循环:
- 用于遍历可迭代对象(如数组、字符串、Map 和 Set)的元素。
- 提供对每个元素的直接访问。
- 语法:
for (const item of iterable) { // 代码块,在这里可以访问到每个元素 item }1
2
3 - 示例:
const arr = [1, 2, 3]; for (const num of arr) { console.log(num); // 依次打印 1, 2, 3 }1
2
3
4
- 对象
object是不能直接使用for of进行遍历的,如果要对对象使用for of需要使用Object.entries()返回对象键值对结果,再对该结果进行遍历 - 示例:
const object1 = { a: 'somestring', b: 42, }; for (const [key, value] of Object.entries(object1)) { console.log(`${key}: ${value}`); // ['a', 'somestring'] ['b', 42] }1
2
3
4
5
6
7
8
- for...in 循环:
- 用于遍历对象的键(包括继承的键)。
- 提供对每个键的访问,而不是键对应的值。
- 语法:
for (const key in object) { // 代码块,在这里可以访问到每个键 key 和对应的值 object[key] }1
2
3 - 示例:
const obj = { a: 1, b: 2, c: 3 }; for (const key in obj) { console.log(`${key}: ${obj[key]}`); // 打印 "a: 1", "b: 2", "c: 3" }1
2
3
4
注意:
for...of通常用于数组和字符串,因为它直接提供每个元素的值。for...in通常用于对象,因为它遍历对象的键。- 当使用
for...in循环遍历数组时,循环会按照数组索引的字符串形式进行迭代,而不是按照数组元素的顺序。 - 对于继承属性,
for...in会枚举对象自身的可枚举属性以及它从原型链上继承的可枚举属性,而for...of不会。 - 在处理大型集合或性能敏感的应用时,
for...of通常比for...in更高效。
选择使用哪种循环取决于你的具体需求和你要遍历的数据类型。
上次更新: 2025/09/05, 8:09:00