typescript 中 for..of 和 for..in的区别

 更新时间:2025年10月10日 09:55:38   作者:心随雨下  
本文主要介绍了typescript 中 for..of 和 for..in的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

for..of - 遍历值

用于遍历可迭代对象的值(数组元素、字符串字符、Map/Set 的值等)。

// 数组
const arr = [10, 20, 30];
for (const value of arr) {
  console.log(value); // 10, 20, 30
}

// 字符串
const str = "hello";
for (const char of str) {
  console.log(char); // 'h', 'e', 'l', 'l', 'o'
}

// Map
const map = new Map([['a', 1], ['b', 2]]);
for (const [key, value] of map) {
  console.log(key, value); // 'a' 1, 'b' 2
}

for..in - 遍历键/属性名

用于遍历对象的可枚举属性名(包括原型链上的属性)。

// 对象
const obj = { a: 1, b: 2, c: 3 };
for (const key in obj) {
  console.log(key); // 'a', 'b', 'c'
  console.log(obj[key]); // 1, 2, 3
}

// 数组(不推荐)
const arr = [10, 20, 30];
for (const index in arr) {
  console.log(index); // '0', '1', '2' (字符串)
  console.log(arr[index]); // 10, 20, 30
}

主要区别

特性for..offor..in
遍历内容键/属性名
适用对象可迭代对象任何对象
原型链属性不遍历会遍历
数组索引类型不适用字符串
性能通常更好稍慢

实际使用建议

// 数组 - 使用 for..of
const numbers = [1, 2, 3];
for (const num of numbers) {
  console.log(num); // 1, 2, 3
}

// 对象 - 使用 for..in(配合 hasOwnProperty)
const person = { name: "John", age: 30 };
for (const key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(`${key}: ${person[key]}`);
  }
}

// 更好的对象遍历方式
Object.keys(person).forEach(key => {
  console.log(`${key}: ${person[key]}`);
});

// 或者使用 Object.entries
for (const [key, value] of Object.entries(person)) {
  console.log(`${key}: ${value}`);
}

重要注意事项

class Person {
  name: string;
  age: number;
  
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

Person.prototype.gender = 'male'; // 在原型上添加属性

const john = new Person('John', 25);

// for..in 会遍历原型链上的属性
for (const key in john) {
  console.log(key); // 'name', 'age', 'gender'
}

// for..of 不能直接用于普通对象
// 这会报错:TypeError: john is not iterable
// for (const value of john) { }

总结:使用 for..of 遍历数组和可迭代对象的值,使用 for..in(谨慎地)遍历对象的属性名。

到此这篇关于typescript 中 for..of 和 for..in的区别的文章就介绍到这了,更多相关typescript for..of 和 for..in内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • xWin之JS版(2-26更新)

    xWin之JS版(2-26更新)

    xWin之JS版(2-26更新)...
    2007-01-01
  • 前端实现加密的常见方法和步骤

    前端实现加密的常见方法和步骤

    这篇文章主要介绍了前端实现加密的常见方法和步骤,包括对称(AES)、非对称(RSA/ECC)及哈希(SHA-256)算法,推荐使用WebCryptoAPI、CryptoJS等工具,需要的朋友可以参考下
    2025-06-06
  • uniapp开发H5使用formData上传文件解决方案

    uniapp开发H5使用formData上传文件解决方案

    我们很多时候上传文件就是使用FormData,然而uniapp默认不支持FormData类型数据的上传,下面这篇文章主要给大家介绍了关于uniapp开发H5使用formData上传文件的相关资料,需要的朋友可以参考下
    2023-12-12
  • TypeScript学习笔记之类型窄化篇

    TypeScript学习笔记之类型窄化篇

    目前用TypeScript的人越来越多,尤其是一些大厂,大的项目,github上面很多开源项目也都是ts语法编译的,这篇文章主要给大家介绍了关于TypeScript学习笔记之类型窄化的相关资料,需要的朋友可以参考下
    2021-09-09
  • js中cookie的使用详细分析

    js中cookie的使用详细分析

    JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求。 cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制,而并不是JavaScript本身的性质。
    2008-05-05
  • WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现

    WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现

    这篇文章主要介绍了WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现,顺带显示和隐藏评论者信息的实现方法,非常实用,需要的朋友可以参考下
    2016-01-01
  • JavaScript中闭包(Closure)举例深度讲解

    JavaScript中闭包(Closure)举例深度讲解

    闭包可以用来模拟块级作用域,从而避免变量污染和命名冲突,下面这篇文章主要介绍了JavaScript中闭包(Closure)的相关资料,文中通过代码介绍非常详细,需要的朋友可以参考下
    2025-09-09
  • vue3 uniapp微信登录功能实现

    vue3 uniapp微信登录功能实现

    根据最新的微信小程序官方的规定,uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号,这篇文章主要介绍了vue3 uniapp微信登录功能实现,需要的朋友可以参考下
    2024-04-04
  • javascript入门之数组[新手必看]

    javascript入门之数组[新手必看]

    本文介绍了javascript 数组的定义和数组元素的操作,ECMAScript中的数组方法...希望对大家有所帮助
    2016-11-11
  • JavaScript深入介绍WebAPI的用法

    JavaScript深入介绍WebAPI的用法

    JS分成三个大的部分:ECMAScript、DOM API、BOM API,其中:ECMAScript是让前端开发建立基本的编程思维。但是要想真正来写一个更加复杂的有交互式的页面,还需要WebAPI的支持,相当于把后端编程实现成前端交互。DOM+BOM就组成了WebAPI
    2022-06-06

最新评论