for...in...循环和for...of...循环的区别
1.for...in...遍历得到的是key;for...of...遍历得到的是value
2.二者适应不同的数据类型
- 遍历对象:for...in...可以,for...of...不可以
- 遍历Map和Set结构:for...in...不可以,for...of...可以
- 遍历generator:for...in...不可以,for...of...可以
3.二者在什么场景下使用呢?
for...in...用在可枚举的数据
- 对象
- 数组
- 字符串
什么是可枚举呢?enumerable 都是 true
for...of...用于可迭代的数据
- 数组
- 字符串
- Map
- Set
什么是可迭代的数据?
-
1.只要一个数据已经实现了Iterator接口, 那么这个数据就有一个叫做
[Symbol.iterator]的属性 -
2.
[Symbol.iterator]的属性会返回一个函数 -
3.
[Symbol.iterator]返回的函数执行之后会返回一个对象 -
4.
[Symbol.iterator]函数返回的对象中又一个名称叫做next的方法 -
5.next方法每次执行都会返回一个对象
{value: 10, done: false} -
6.这个对象中存储了当前取出的数据和是否取完了的标记。