数据汇合【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
}
}
}
}