// 迭代器 是对数据结构读取的方式,有序的,连续的,基于拉取的一种消耗数据的组织方式。
let arr = [1, 2, 3];
console.log(arr);
let iter = arr[Symbol.iterator]();
console.log(iter.next()); //{value: 1,done: false}
console.log(iter.next()); //{value: 2,done: false}
console.log(iter.next()); //{value: 3,done: false}
console.log(iter.next()); //{value: undefined,done: true}
console.log(iter.next()); //{value: undefined,done: true}
// 迭代就是对数据统一的数据抽取。
// Array, Map, Set, WeakMap,arguments nodelist(节点对象) TypeArray
// 类数组 arguments nodelist(节点对象) Map Set WeakMap WeakSet(节点对象)
// TypeArray:类型数组 底层二进制数据的缓存区;
// 迭代器实现方式 Symbol.iterator
// 返回一个对象 有next方法 调用next方法返回一个对象{value: '',done: false}
function makeIterator(arr) {
var nextIndex = 0,
len = arr.length;
return {
next: function () {
return (nextIndex < len ? {
value: arr[nextIndex++],
done: false
} : {
value: undefined,
done: true
})
}
}
}
// TypeArray:类型数组 在JavaScript中是没有这个构造函数的。
const tArray = new Int8Array(8);
console.log(tArray);
tArray[0] = 100;
// C++ JAVA C# Python for...Of 迭代
let arr = [1, 2, 3, 4];
for (let i of arr) {
console.log(i); // 1, 2, 3, 4;
}
let obj = {
start: [1, 2, 3, 4],
end: [5, 6, 7],
[Symbol.iterator]() {
let idx = 0,
arr = [ ...this.start, ...this.end],
len = arr.length;
return {
next() {
return (idx < len ? {
value: arr[idx++],
done: false
} :
{
value: undefined,
done: true
})
}
}
}
};
for (let i of obj) {
console.log(i); // obj is not iteratorable
}