js循环及for-in , for-of的区别
循环
字符串遍历:可通过for-of遍历字符串
for-in:遍历对象自身可继承可枚举属性
Object.keys():返回对象自身可枚举属性的键组成的数组
Object.getOwnPropertyNames():返回对象自身可继承可枚举非枚举属性的键组成的数组
Object.getOwnPropertySymbols():返回对象Symbol属性的键组成的数组
Reflect.ownKeys():返回对象自身可继承可枚举非枚举Symbol属性的键组成的数组
ForOf循环
- 定义:调用Iterator接口产生遍历器对象(for-of内部调用数据结构的Symbol.iterator())
- 遍历字符串:for-in获取索引,for-of获取值(可识别32位UTF-16字符)
- 遍历数组:for-in获取索引,for-of获取值
- 遍历对象:for-in获取键,for-of需自行部署
- 遍历Set:for-of获取值 => for (const v of set)
- 遍历Map:for-of获取键值对 => for (const [k, v] of map)
- 遍历类数组:包含length的对象、Arguments对象、NodeList对象(无Iterator接口的类数组可用Array.from()转换)
- 计算生成数据结构:Array、Set、Map
- keys():返回遍历器对象,遍历所有的键
- values():返回遍历器对象,遍历所有的值
- entries():返回遍历器对象,遍历所有的键值对
- 与for-in区别
- 有着同for-in一样的简洁语法,但没有for-in那些缺点、
- 不同于forEach(),它可与break、continue和return配合使用
- 提供遍历所有数据结构的统一操作接口