一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
很多时候我们差的只是再坚持一下。
for...of 与 for...in在我们的程序中被大量使用,我们都知道对于对象、数组,我们可以使用for...in,对于map、set我们可以使用for...of,那么他们之间的差别是什么呢?
对比
key和value的差别
- for...in 遍历得到的是key; key是字符串格式,所以对于遍历数组得到的key无法直接相加
- for...of 遍历得到的是value; 来看一下代码
适用于不同的数据类型
-
遍历对象:for...in可以,for...of不可以
-
遍历Map、Set:for...of可以,for...in不可以
-
遍历generator:for...of可以,for...in不可以
for...in遍历你会发现其能够将原型方法和属性也遍历出来,这有时候会对我们的遍历结果造成影响,这个时候呢,我们就需要使用hasOwnProperty()方法进行一下判断。
可枚举对比可迭代
- for...in用于可枚举的数据:对象、数组、字符串的 这里我们需要用到Object.getOwnPropertyDescriptors方法
只要enumerable: true就说明是可枚举的
- for...of用于可迭代的数据:数组、字符串、Set、Map
这里我们需要借助Symbol.iterator这个属性或者称之为方法
执行该方法后,你会发现其中存在一个next方法或属性,这就说明其是可迭代的
总结
for...of 与 for...in的对比,最后还是要看是否对可枚举和可迭代有比较深刻的理解,如果只是单纯的江答案背下来,能够解决常见问题,但只是浮于表面。如果你对这二者的对比有兴趣,可以按照本文的思路重新梳理一遍,将代码敲一遍,我相信会有新的理解。