数据汇合【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
}
}
}
}
发表回复