for…of 是 ES6 新增的遍历方式,允许遍历一个含有 iterator 接口的数据结构(数组、对象等)并且返回各项的值,和 ES3 中的 for…in 的区别如下:
1、对对象的遍历
- for…in 获取的是对象的键名,for…of 遍历获取的是对象的键值;
- for…in 会遍历对象的整个原型链,性能非常差不推荐使用,而 for…of 只遍历当前对象不会遍历原型链;
2、对数组的遍历
- for…in 会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),for…of 只返回数组的下标对应的属性值;
【总结 :】 for...in 循环主要是为了遍历对象而生,不适用于遍历数组;for...of 循环可以用来遍历数组、类数组对象,字符串、Set、Map 以及 Generator 对象。
| 区别 | for…in | for…of |
|---|---|---|
| 获取对象的键名 / 键值 | 键名(key) | 键值(value) |
| 是否遍历对象原型链 | ✔️ | × |
| 遍历数组返回的数据 | 所有可枚举属性(包括原型) | 下标对应的属性值 |
| 适合遍历对象 / 数组 | 对象 | 数组 |
| 可遍历的数据 | 可枚举的数据 | 可迭代的数据 |