for in 和 Object.keys 和 for of的区别
for in
- for in一般用于遍历对象的属性;
- 作用于数组的for in除了会遍历数组元素外,还会遍历自定义可枚举的属性,以及原型链上可枚举的属性;
- 作用于数组的for in的遍历结果是数组的索引,且都为字符串型,不能用于运算;
- 某些情况下,可能按照随机顺序遍历数组元素;
Object.keys()
- 遍历结果为由对象自身可枚举属性组成的数组,数组中的属性名排列顺序与使用for in循环遍历该对象时返回的顺序一致;
- 与for in区别在于不能遍历出原型链上的属性;
for of
- ES6中添加的循环语法;
- for of支持遍历数组、类对象(例如DOM NodeList对象)、字符串、Map对象、Set对象;
- for of不支持遍历普通对象,可通过与Object.keys()搭配使用遍历;
- for of遍历后的输出结果为数组元素的值;
- 搭配实例方法entries(),同时输出数组内容和索引;