为什么不建议用for in遍历数组
for...in本身是Object的遍历方法,js中的数组也继承自Object,所以也能够使用for...in遍历出属性。然而for...in遍历数组时有一些细节需要注意。
1、for...in遍历的属性是字符串,而不是数字
const arr = [1, 2, 3] for (const i in arr) { console.log(i, typeof i) }
打印结果:
2、for...in遍历的是对象的可枚举属性,包括原型链上的属性
const obj = { a: 'a', b: 'b' } Object.prototype.c = 'c' Object.defineProperty(obj, 'd', { value: 'd', enumerable: true // enumerable默认值为false,设置为true时可以被for...in遍历到 }) for (const i in obj) { console.log(i, obj[i]) }
打印结果:defineProperty中enumerable的默认值是false,for...in遍历不到,如果设置为true即可被for...in遍历到
3、遍历的顺序是对象属性的枚举顺序,不是按照数组的下标顺序遍历
如果需要按照索引顺序去遍历,不要使用for...in去遍历,而应该使用for...of或者for循环、forEach等方法。
此外,因为有稀疏数组的存在,其实JS里的数组不一定是顺序结构存储的。当数组的键分布较为稀疏,为了充分节约空间,数组可能会退化为像对象一样的哈希表存储结构。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
2020-05-22 图片预览----v-viewer插件的使用