JS中的for in和for of

在JavaScript中,for...infor...of都是用于迭代循环的结构:

1. for...in循环:

for...in循环主要用于遍历对象的可枚举属性。这种循环不仅遍历对象自身的属性,还会遍历原型链上的可枚举属性。它的语法如下:

for (variable in object) {
  // 执行的代码
}

其中variable是属性名,object是要遍历的对象。

注意:虽然for...in循环也可以用于遍历数组,但这并不推荐,因为它会遍历数组的所有可枚举属性,包括非索引属性和原型链上的属性。

示例:

const obj = { a: 1, b: 2, c: 3 };

for (const key in obj) {
  console.log(`${key}: ${obj[key]}`);
}

// 输出:
// a: 1
// b: 2
// c: 3

2. for...of循环:

for...of循环用于遍历可迭代对象(例如数组、字符串、Map、Set等),这是ES6引入的新特性。它的语法如下:

for (variable of iterable) {
  // 执行的代码
}

其中variable是每次迭代时的当前元素,iterable是要遍历的可迭代对象。

示例:

const arr = [1, 2, 3];

for (const value of arr) {
  console.log(value);
}

// 输出:
// 1
// 2
// 3


for...infor...of循环在JavaScript中具有不同的使用场景,它们之间的主要区别如下:

1. 遍历对象:
  • for...in:适用于遍历对象的可枚举属性,包括原型链上的属性。它会遍历对象自身的属性以及继承自原型链的可枚举属性。这对于处理对象属性时非常有用。
  • for...of:不适用于普通对象,因为它们不是可迭代的。如果需要遍历对象属性,建议使用for...in循环。
2. 遍历数组:
  • for...in:虽然可以用于遍历数组,但并不推荐。因为for...in会遍历所有可枚举属性,包括非索引属性和原型链上的属性。这可能导致意外的结果和性能问题。
  • for...of:推荐用于遍历数组,因为它只遍历数组的元素,不会遍历非索引属性或原型链上的属性。
3. 遍历其他可迭代对象(例如字符串、Map、Set):
  • for...in:不适用于遍历这些可迭代对象。
  • for...of:可以遍历这些可迭代对象,如字符串、Map、Set等。
4. 性能:
  • for...in:由于需要遍历对象的原型链,可能导致性能较差。
  • for...of:遍历可迭代对象时,性能较好。
总结:
  • 使用for...in循环遍历对象的可枚举属性(包括原型链上的属性)。
  • 使用for...of循环遍历可迭代对象,如数组、字符串、Map、Set等。
  • 在处理数组时,尽量避免使用for...in循环,以防止意外的结果和性能问题。

在实际应用中,根据数据类型和所需操作来选择合适的循环结构。同时,还可以考虑使用其他迭代方法,如数组的forEachmapfilter等高阶函数。

原文链接:https://juejin.cn/post/7223551330450456632 作者:施主来了

(0)
上一篇 2023年4月19日 上午10:10
下一篇 2023年4月19日 上午10:21

相关推荐

发表回复

登录后才能评论