ES6中的迭代器是一種新的對象,它具有一個next()方法。next()方法返回一個對象,這個對象包含兩個屬性:value和done。value屬性是迭代器中的下一個值,done屬性是一個布爾值,表示迭代器是否已經遍歷完所有的值。迭代器是一個懶加載的機制,只有在調用next()方法時才會返回下一個值。
我們可以使用for…of循環來遍歷數組中的元素,讓對象實現for-of遍歷。此外,ES6還引入了生成器的概念,它是一種特殊的迭代器。生成器可以用來創建一個可暫停的函數,這個函數可以在執行過程中多次暫停和恢復。
迭代器實現了Iterator接口,只要有實現了Iterator就可以使用for-of遍歷
?
let arr=[1,2,3,4,5];
console.log(arr.keys());
console.log(arr.values());
console.log(arr.entries());
// keys values entries 當前變量是迭代器對象
// 迭代器對象實現了Iterator接口,只要實現了迭代接口就可以使用for-of 遍歷
// let [a,b]=10; 報錯10 is not iterable
let str='hello'; //實現了迭代器接口,可以遍歷
// console.log(a,b);
for(let key of str){console.log(key)
}
// 以前遍歷字符串
let [...a]=str;
console.log(a)
let result=str.split("")
console.log(result);
for(i=0;i<str.length;i++){console.log(str.charAt(i))
}遍歷迭代器對象
let keys=arr.keys()
for(let key of keys){console.log(key)
}
let values=arr.values();
for(let value of values){console.log(value,'--------')
}
let entries=arr.entries();
for(let entry of entries){console.log(entry)
}
while(!(result=keys.next()).done){console.log(result)
}
for-of實現原理就是調用迭代器的next()方法,第一次調用將指針指向數據結構的第一個成員,依次調用依次指向,直到沒有成員可以指向,done為true迭代過程:創建一個指針對象,指向當前的數據結構起始位置;第一次調用指針對象的next方法,指向數據結構的第一個成員;第二次調用指針對象的next方法,指向數據結構的第二個成員;直到done為true,指向數據結構的結束位置;
let keys=arr.keys();
let values=arr.values();
let entries=arr.entries()
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(entries.next())