for in可以遍历对象和数组
使用for in遍历时,会有以下问题
-
index索引为字符串型数字(注意,非数字),不能直接进行几何运算
-
遍历顺序有可能不是按照实际数组的内部顺序(可能按照随机顺序)
-
使用for-in会遍历数组所有的可枚举属性,包括原型方法method和name属性都会被遍历出来,通常需要配合hasOwnProperty()方法判断某个属性是否该对象的实例属性,来将原型对象从循环中剔除
所以for-in更适合遍历对象且配合hasOwnProperty()方法一起使用,通常是建议不要使用for-in遍历数组
for of 只能遍历数组,不能遍历对象
for of可以简单有效的遍历数组,并且不会遍历原型上的method和name
如果想要遍历,可通过Object.keys()把对象转化为数组再遍历
他有如下优点:
-
这是最简洁、最直接的遍历数组元素的语法
-
这个方法避开了for-in循环的所有缺陷
-
与forEach()不同的是,它可以正确响应break、continue和return语句
简单总结就是
- for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值
- for-in得到的是对象的key或数组、字符串的下标
- for-of得到的是对象的value或数组、字符串的值,另外还可以用于遍历Map和Set