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