1.1 基本概念
在 JavaScript 中,Iterators 和 iterables 是基礎的概念,它們讓對象可以被遍歷。在現代的 JavaScript 中,這些概念被廣泛應用於各種結構中,像是 for...of 迴圈、spread operator、解構賦值等等。在這個講座中,我們會討論什麼是 iterables 和 iterators,如何運作,以及如何創建和使用它們。
Iterables (可迭代對象)
可迭代對象是那些實現了迭代協議的對象。它們必須有一個帶有鍵值 [Symbol.iterator] 的特殊方法,這個方法應該返回一個迭代器對象。
Iterators (迭代器)
迭代器是一個具有 next() 方法的對象,這個方法返回一個帶有兩個屬性的對象:
value— 序列下一個元素的值done— 一個布林值,表示序列是否已結束 (true) 或尚未結束 (false)
來看看一些使用範例。
內建的可迭代對象
JavaScript 有幾個內建的可迭代對象,包括數組、字符串、Set 和 Map 對象。
範例 1: 遍歷數組
JavaScript
const array = [1, 2, 3, 4, 5];
for (const item of array) {
console.log(item);
}
// 輸出:1 2 3 4 5
範例 2: 遍歷字符串
JavaScript
const string = 'hello';
for (const char of string) {
console.log(char);
}
// 輸出:h e l l o
1.2 創建自己的迭代器
你可以通過實現迭代協議,即創建 next() 方法,來創建你自己的迭代器。
範例 1: 創建迭代器
JavaScript
function createIterator(array) {
let index = 0;
return {
next: function() {
if (index < array.length) {
return { value: array[index++], done: false };
} else {
return { done: true };
}
}
};
}
const myIterator = createIterator([1, 2, 3]);
console.log(myIterator.next()); // { value: 1, done: false }
console.log(myIterator.next()); // { value: 2, done: false }
console.log(myIterator.next()); // { value: 3, done: false }
console.log(myIterator.next()); // { done: true }
創建可迭代對象
要讓一個對象成為可迭代的,它必須實現 [Symbol.iterator] 方法。對,就是這麼個奇妙的名字。以下是如何創建它。
範例 2: 創建可迭代對象
JavaScript
const myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
}
};
for (const value of myIterable) {
console.log(value);
}
// 輸出:1 2 3
1.3 內建方法
讓我們看看操作可迭代對象的內建方法和運算符。
範例 1: spread 運算符
spread 運算符 (...) 可以用於複製或合併可迭代對象。
JavaScript
const array = [1, 2, 3];
const newArray = [...array, 4, 5, 6];
console.log(newArray); // 輸出:[1, 2, 3, 4, 5, 6]
範例 2: 解構賦值
解構賦值允許你從可迭代對象中提取值。
JavaScript
const [first, second, third] = [1, 2, 3];
console.log(first); // 輸出:1
console.log(second); // 輸出:2
console.log(third); // 輸出:3
範例 3: Array.from 和 Array.of 方法
Array.from() 方法讓你從可迭代對象創建一個數組。
JavaScript
const set = new Set([1, 2, 3, 4, 5]);
const array = Array.from(set);
console.log(array); // 輸出:[1, 2, 3, 4, 5]
GO TO FULL VERSION