JavaScript 中的 `for...in` 和 `for...of`

JavaScript 中的 for...infor...of 是两种常用的迭代循环语句。它们的用途和行为是不同的。

for...in 循环用于循环遍历对象的属性,它会遍历对象的可枚举属性和原型链上的可枚举属性。

const obj = { a: 1, b: 2 };
for (let prop in obj) {
  console.log(prop);  // 输出 'a' 和 'b'
}

上面的代码遍历了 obj 对象的所有属性,并输出了属性名称。

需要注意的是,for...in 循环不保证属性遍历的顺序是固定的,所以不能在遍历对象的时候依赖属性遍历的顺序。

另外,for...in 循环还有一个重要的用途,就是遍历对象的原型链上的属性。

function Person() {
  this.name = 'Tom';
}

Person.prototype.age = 18;

const p = new Person();

for (let prop in p) {
  console.log(prop);  // 输出 'name' 和 'age'
}

上面的代码中,p 对象既有自己的属性,也有继承自原型的属性。for...in 循环可以同时遍历这两种属性。

for...of 循环用于遍历可迭代对象(包括 ArrayMapSetString 等对象)的元素。它只遍历对象的值,而不是键或者属性。

const arr = ['a', 'b', 'c'];
for (let item of arr) {
  console.log(item);  // 输出 'a'、'b'、'c'
}

上面的代码遍历了 arr 数组中所有的元素,并输出每个元素的值。

另外,需要注意的是,for...of 循环只能用于遍历迭代对象的值,而不能用于遍历对象的属性。如果用于非迭代对象上,将会出现类型错误的异常。

const obj = { a: 1, b: 2 };
for (let item of obj) {
  console.log(item);  // 抛出 TypeError 异常: obj is not iterable
}

上面的代码中,obj 不是一个可迭代对象,所以使用 for...of 循环将会抛出一个 TypeError 异常。

posted @   槑孒  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示