for in 和 for of 区别
-
推荐在循环对象属性的时候,使用
for...in
,在遍历数组的时候的时候使用for...of
。 -
for...in
循环出的是key,for...of
循环出的是value -
注意,
for...of
是ES6新引入的特性。修复了ES5引入的for...in
的不足 -
for...of
不能循环普通的对象,需要通过和Object.keys()
搭配使用
遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of
循环,Iterator 接口主要供for...of
消费。(摘自阮一峰 http://es6.ruanyifeng.com/#docs/iterator)
js中原生数据结构中有遍历器:
- Array
- Map
- Set
- String
- TypedArray
- 函数的 arguments 对象
- NodeList 对象
对象(Object)之所以没有默认部署 Iterator 接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。本质上,遍历器是一种线性处理,对于任何非线性的数据结构,部署遍历器接口,就等于部署一种线性转换。不过,严格地说,对象部署遍历器接口并不是很必要,因为这时对象实际上被当作 Map 结构使用,ES5 没有 Map 结构,而 ES6 原生提供了。(摘自阮一峰 http://es6.ruanyifeng.com/#docs/iterator)
小白一枚,如有错误欢迎指点.