百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

JavaScript 中 for/of 和 for/in 的区别

myzbx 2025-07-09 16:06 4 浏览

近日,于闲暇之时,我沉浸于 JavaScript 之经典著作犀牛书,当阅览至循环语句部分,顿觉有必要予以记录。

for/of 与 for/in 乃是工作中屡被运用的语句,for/of 是 ES6 新增的,而 for/in 是JavaScript从一开始就有的,以下将记录下它们之间的主要差异。

主要区别

特性

for/of

for/in

遍历对象

可迭代对象的值

任意对象

用途

遍历数组、字符串等可迭代对象的值

遍历对象属性名

原型链属性

只遍历对象自身的值

会遍历继承的可枚举属性

适用对象

数组、字符串、Map、Set 等可迭代对象

普通对象

示例比较

1.遍历数组

const arr = ['a', 'b', 'c'];

// for...in 遍历索引/键名
for (let index in arr) {
  console.log(index); // 输出: 0, 1, 2
}

// for...of 遍历值
for (let value of arr) {
  console.log(value); // 输出: 'a', 'b', 'c'
}

2.遍历对象

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

// for...in 可以遍历对象属性
for (let key in obj) {
  console.log(key); // 输出: 'a', 'b', 'c'
}

// for...of 不能直接用于普通对象
// 会抛出 TypeError: obj is not iterable
try {
  for (let value of obj) {
    console.log(value);
  }
} catch (e) {
  console.log(e.message); 
}

3.原型链上的属性

function Person() {
  this.name = 'Alice';
}
Person.prototype.age = 25;

const person = new Person();

// for...in 会遍历原型链上的可枚举属性
for (let prop in person) {
  console.log(prop); // 输出: 'name', 'age'
}

// 可以使用 hasOwnProperty 过滤
for (let prop in person) {
  if (person.hasOwnProperty(prop)) {
    console.log(prop); // 输出: 'name'
  }
}

4.遍历字符串

const str = "hello";

// for...in 遍历索引
for (let index in str) {
  console.log(index); // 输出: 0, 1, 2, 3, 4
}

// for...of 遍历字符
for (let char of str) {
  console.log(char); // 输出: 'h', 'e', 'l', 'l', 'o'
}

5.遍历其他可迭代对象

const set = new Set([1, 2, 3]);

// for...in 不适用于 Set
for (let prop in set) {
  console.log(prop); // 不输出任何内容
}

// for...of 可以遍历 Set 的值
for (let value of set) {
  console.log(value); // 输出: 1, 2, 3
}

何时使用

  • 使用 for/in 当你需要遍历对象的属性名
  • 使用 for/of 当你需要遍历数组、字符串或其他可迭代对象的值

在 ES6 及更高版本中,对于数组遍历,通常推荐使用 for/of 而不是 for/in,因为它直接提供值而不是索引,并且不会意外遍历到数组的非数字属性。

相关推荐

男人的内裤,到底可以穿多久?(男人内裤最多能穿几天)

女生们如果家里有男生可能会发现——他们对内裤很恋旧穿到褪色松垮穿到别有洞天穿到一网情深穿到人间蒸发都仍然...舍不得这位老伙计男生们到底有多热爱旧内裤?有外国媒体曾在街头采访,发现:女士们往往会随...

typeof 与 instanceof 区别(typeof与instanceof区别)

typeof操作符返回一个字符串,表示未经计算的操作数的类型使用方法如下:typeofoperandtypeof(operand)operand表示对象或原始值的表达式,其类型将被返回举个例子...

年纪轻轻病情就已是晚期!你还敢再喝这种饮料吗?

本文作者:谢祥成,浙江大学医学院附属邵逸夫医院肾内科主任医师吴俊男,浙江大学医学院附属邵逸夫医院肾内科主治医师30岁的金先生(化名)是一名才华横溢的设计师。半年前出现视物模糊,起初以为是用眼过度,没有...

typeof 与 instanceof 有什么区别

typeof和instanceof是JavaScript中用于类型检查的两个操作符,但它们的用途和适用场景有显著区别。以下是它们的区别及使用注意事项:1.typeof作用:返回一个变量的基本...

数据结构之顺序表(数据结构顺序表图书管理系统)

线性表定义线性表是n(n≥0)个具有相同特性的数据元素的有限序列。记作:(a1,a2,…,ai-1,ai,ai+1,…,an)线性表相关概念直接前驱元素:ai-1领先于ai,称a...

每一个成熟的人,都需要具备「翻篇」这种能力

“翻篇儿”——仿佛读出这个儿化音,才够表达那种潇洒的感觉是一种人生中非常重要的心理过程和心理技能。人生注定不完美,我们只要活着就会遭遇不愉快的经历,只有及时翻篇儿,才能把更多注意力放在当下,不被过去的...

打通 JAVA 与内核系列之 一 ReentrantLock 锁的实现原理

写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁)。其中synchronized锁是JAVA语言层面提供的能力,在此不...

韩国吃货主播,美食声控咀嚼音,你是搬运工,好吃到停不下来

刘姐畅谈。Hey,Hongsi。TodaywehaveassortedtoysthatImade。Foryouguysfirst。Itlookscrunchybecause...

黄子韬2019新歌最好的我们完整歌词介绍在哪可以听

最好的我们(TheBestofUs)-黄子韬词:黄子韬曲:黄子韬编曲:DarylK制作人:DarylK助理制作:郭舒文和音:黄子韬电吉他:CalvinC木吉他:雷十一录音室:Kong...

刷一道LeetCode -- 三数之和(三数之和算法)

原题:https://leetcode-cn.com/problems/3sum/给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c...

隐藏在阳光当中的地球刺客(隐藏在阳光下的秘密)

小行星什么时候会撞击地球?这一直是大家比较关注的问题,特别是当大家知道地球上前一任住户是亡于小行星之后,就更加关注这个问题了。图1尤卡坦半岛的陨石坑(NASA)实际上,地球每天都会遭受到一些天体的袭...

安卓手机爱奇艺app中离线视频导出

安卓手机爱奇艺app中离线视频导出:通常我在爱奇艺中发现好的视频,想保存下来,点击离线缓存,缓存好后,在手机上可以查看,但是使用手机连接电脑打开后,发现保存视频的文件夹是空的。1)在手机中爱奇艺文...

50款经典奥斯汀月季,超多图片,抗病好养新手必种的月季

【50款经典奥斯汀月季】大家好,今天来给大家介绍50款经典的奥斯汀月季,奥斯汀是一位伟大的育种家,以他命名的奥斯汀公司也繁育出了数量众多的月季品种。根据木木的种植经验,奥斯汀的月季大多植株长势良...

你也想像J姐一样在梦幻芭比大house里“哭泣”吗?

“6年前我的兜里只揣着400元美金,现如今我已经住上了这上亿豪宅”他是一个我行我素,敢说敢做的一个网红博主他测评过的彩妆都卖断货了他的自创同名品牌深受好评他就是JeffreeStar,你们传说中的J...

VB Do While\Until,Loop循环语句

DoWhile\Until…….Loop循环语句上一节讲了For……Next循环语句,这节讲DoWhile\Until…….Loop循环语句。有人会有疑问,既然有For循环,还要Do循环干什么?它...