for in与for of的区别

简介: for in与for of的区别

在JavaScript中,for…in和for…of都是用来遍历集合的循环控制结构,但它们之间存在一些重要的区别:


用途不同:

for…in循环用于遍历对象的属性。

for…of循环用于遍历可迭代对象(如数组,字符串,Set,Map等)的值。

遍历的内容不同:

for…in会遍历对象所有的可枚举属性,包括原型链上的属性。

for…of遍历的是可迭代对象的实际值,不包括原型链上的值。

循环控制不同:

for…in循环使用对象的属性名作为循环变量的值。

for…of循环使用迭代器的值作为循环变量的值。

语法结构不同:

for…in语法:

for (let 变量 in 对象) {
  // 使用变量来引用属性名
}
 
 

for…of语法

for (let 变量 of 可迭代对象) {
  // 使用变量来引用迭代器的值
}

迭代的可选性不同:

for…in循环中,即使属性是undefined或原型链上的属性,只要可枚举,也会被遍历到。

for…of循环中,只有可迭代对象中实际存在的值才会被遍历到。

与数组的索引关系:

for…in不直接与数组的索引相关联,所以不能直接获取索引。

for…of可以与数组的索引相关联,通过数组的entries()方法,可以同时获取索引和值。

// 对象
const obj = { a: 1, b: 2, c: 3 };
 
// 使用 for...in 遍历
for (let key in obj) {
  console.log(key, obj[key]); // 输出 a=1, b=2, c=3
}
 
// 数组
const arr = [10, 20, 30];
 
// 使用 for...of 遍历
for (let value of arr) {
  console.log(value); // 输出 10, 20, 30
}
 
// 使用 for...of 遍历数组索引和值
for (let [index, value] of arr.entries()) {
  console.log(index, value); // 输出 0=10, 1=20, 2=30
}
相关文章
|
Web App开发 缓存 前端开发
前端性能优化:从入门到精通
【2月更文挑战第3天】
453 1
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
563 0
|
11月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
686 1
|
6月前
|
缓存 监控 前端开发
前端静态资源加载优化
本文系统讲解前端静态资源加载优化,涵盖资源压缩、缓存策略、CDN加速、懒加载、预加载、HTTP/2升级等十大核心维度,结合Webpack配置与实战案例,助力开发者提升页面性能,打造极致用户体验。
446 0
|
消息中间件 存储 前端开发
MQ有什么应用场景
MQ有什么应用场景
|
JavaScript
Vue3瀑布流(Waterfall)
这是一个基于 Vue2 的瀑布流(Waterfall)组件,支持多种自定义属性,如图片数组、列数、间隙、宽度、圆角、背景色及 Spin 加载样式。组件通过计算每张图片的位置实现动态布局,并利用 Vue 的响应式系统自动调整布局。提供了在线预览和详细代码示例,方便集成到项目中。
1034 1
Vue3瀑布流(Waterfall)
|
安全 前端开发 开发者
CSS3 中 calc()、constant() 和 env() 函数的使用指南
在现代网页设计中,CSS3 的 calc()、constant() 和 env() 函数为开发者提供了强大的工具,帮助实现灵活和响应式的布局。本文将深入探讨这三个函数的定义、用法以及最佳实践,特别是如何利用 calc() 进行动态计算、constant() 的历史背景,以及 env() 在处理设备安全区域中的应用。通过本文,读者将能够更好地理解并运用这些函数,提升网页设计的灵活性与用户体验。
747 0
|
JavaScript
JS中for-in和for-of的区别
JS中for-in和for-of的区别
380 0
|
前端开发
css 拉伸 resize —— 实现可拉伸的div(含限制拉伸的尺寸)
css 拉伸 resize —— 实现可拉伸的div(含限制拉伸的尺寸)
979 1