for-of
使用迭代器(iterator)来迭代一个可迭代(iterable)的对象,主要是想取代传统的比较繁琐的 for
及会遍历非自带属性以及无法 continue/break/return
的 forEach
,其基本示例如:
1 2 3 |
|
for-of
默认支持了数组、字符串、类数组以及 ES6 中的 Map 和 Set 等,但不支持平对象(字面量对象)(实际支持情况还看浏览器,比如在此刻 firefox 支持了 NodeList,但 Chrome 还不支持)。
迭代 Map 可以像上面那样使用单变量来在每次迭代时得到一个数组,也可以配合列表结构来直接得到 key 和 value。
1 2 3 4 5 6 7 |
|
迭代器
一个对象只要遵循迭代器协议就是一个迭代器。
迭代器协议
实现了 .next()
方法,该方法返回一个字面量对象,里面需要有两个属性,done
表示是否迭代了最后,value
则是每次迭代需要返回的值。
可迭代对象
一个对象只要遵循了下面的协议,那么就是可迭代对象。
可迭代协议
一个对象或其原型上有 @@iterator
函数( [Symbol.iterator]
),该函数无实参,返回一个遵循迭代器协议的对象。
下面是一个简单的迭代器(同时也是一个可迭代对象),for-of 将会输出 5 4 3 2 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|