1.数据结构只要有Symbol.iterator函数就可遍历
var array = ["a","b","c"];
var iterator = array[Symbol.iterator]();
console.log(iterator.next());//{ value: 'a', done: false }
2.原生的具有iterator接口的数据结构有
array
set
map
arguments
NodeList
3.使用到Symbol.iterator的情况
- 解构赋值
- 扩展运算符...
- yield(yeild用来暂停和继续执行生成器函数,当外部调用生成器函数的next,yeild的右侧的表达式才会执行)
- 可以覆盖原有的Symbol.iterator函数
4.遍历器对象的return(),throw()
- 引发return()函数,发生在for...of中出现break,continue,throw new Error();
5.for...of for..in的区别
- for...of必须部署了iterator接口后可使用
- for...of只能够遍历有数字索引的属性
- for..of可以识别32位的UTF-16字符
- for...in的缺点
1)数组的键名是数字,但是for...in循环是以字符串作为键名“0”、“1”、“2”等
2)for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
3)某些情况下,for...in循环会以任意顺序遍历键名
6.对于array,set,map的遍历函数
values( );
keys( );
entries( );//返回结果是[index, value];
7.对于没有iterator接口的对象可使用Array.from()转换成数组后进行遍历