for in 与 for of
简单记住一句话::::
for in 和 for of 简单来说就是它们两者都可以用于遍历,不过for in遍历的是数组的索引(index),而for of遍历的是数组元素值
总而言之: for in 得到的是 key (键)
for of 得到的是 value(值)
for in总是得到对象的key或数组、字符串的下标
for of总是得到对象的value或数组、字符串的值
- for in(ES1)
for in和for循环方式历史悠久,从ECMAScript 1就被支持。
for in 用来循环数组不是一个合适的选择。
迭代的是属性key,不是值。
由于属性 key 是字符串,迭代出的元素索引是 string,不是 number,不能直接进行运算,
我们来看代码:
var arr = ['你','还','好','吗']
for (let a in arr) {
//看看for in 拿到的a 是什么 看下面的图
console.log(a)

//我们可以看到,拿到的a是一个数组的索引并且是字符串格式,我们想用的话就要记得把他当成索引来用
console.log(arr[a])

}
- for of(ES6)
再来说说ES6 中的 for of
for of遍历的是数组元素值,而且for of遍历的只是数组内的元素,不包括原型属性和索引
for of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象(iterator)的集合,但是不能遍历对象,因为没有迭代器对象,但如果想遍历对象的属性,你可以用for in循环(这也是它的本职工作)或用内建的Object.keys()方法
我们来看代码:
var arr = ['你','还','好','吗']
//还是上面的代码 把in 换成of
for (let a of arr) {
// a直接就是数组里面的值
console.log(a)

// undefined,因为数组里面没有索引为 [你] 的数据嘛
console.log(arr[a])

}
- for in 进阶用法(重要)
上面我们讲了for in 只能遍历key,看起来非常的鸡肋,但是我们突然想到有个地方一直用到key,,,,那就是对象。我们使用for in 遍历对象的key 非常方便
还记得什么是对象吧,{name:'张三'} ======》{key:value}
看代码::
// 定义一个对象
const obj = {
name: '张三',
age: 18,
fn: function () {
console.log('你好 for..in')
}
}
//使用for in 遍历对象
for (let k in obj) {
console.log(k)
}
// 看看结果

- 总结在上面已经说过了这里就不再啰嗦了,大家要记得 for in 并不是一无是处还可以遍历对象,遍历其他的东西就交给es6的for of 吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?