数据汇合【Array,Object,Map,Set】的对立遍历数据结构机制
Iterator 遍历过程
- 创建对象指针,指向起始地位
- 第一次调用next,拜访第一个对象
- 一直调用next办法,直至终止
- { value: undefined, done: true }
var it = makeIterator(['a', 'b']);function makeIterator(array) { var index = 0; return { next: function() { return index < array.length ? { value: array[index++], done: false }: { value: void 0, done: true } } }}
object自身不能被遍历,
ES6规定实现Symbol.iterator 能够反对遍历
var obj = { name: "ranck", massgage: "hahah", level: "t3"}for(let value of obj) { console.log(value) // Uncaught TypeError: obj is not iterable}obj[Symbol.iterator] = function () { // 这样不报错,然而不失效 return { next: function () { return { value: 1, done: false }; } }}obj[Symbol.iterator] = function () { const attrs = Object.getOwnPropertyNames(this) let index = 0 return { next: () => { return index < attrs.length ? { value: this[attrs[index++]], done: false }: { value: void 0, done: true } } }}