การเรียกใช้อิเทอเรเตอร์ใน JavaScript
การเรียกใช้อิเทอเรเตอร์แต่ละครั้งต่อเนื่องกัน ควรส่งคืนวัตถุที่มีโครงสร้างพิเศษ มาลองพิจารณาโครงสร้างนั้นกัน สมมติว่าเรามีอาร์เรย์:
let arr = [1, 2, 3];
รับอิเทอเรเตอร์ของอาร์เรย์ เก็บไว้ในตัวแปร:
let iter = arr[Symbol.iterator]();
ตอนนี้ในตัวแปรนี้มีวัตถุ
ที่มีเมธอด next อยู่ เมธอดนี้จะส่งคืน
วัตถุที่มีคีย์ value ซึ่งบรรจุ
ค่าขององค์ประกอบ และคีย์ done
ซึ่งบรรจุข้อมูลเกี่ยวกับว่า การวนรอบ
จบลงแล้วหรือไม่:
console.log( iter.next() ); // {value: 1, done: false}
การเรียกเมธอด next ต่อเนื่องกัน
จะให้องค์ประกอบถัดไปทุกครั้ง:
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}
รับอิเทอเรเตอร์ของคอลเลกชัน Map
เรียกใช้มันต่อเนื่องกัน
จนกว่าองค์ประกอบของคอลเลกชันจะหมด
รับอิเทอเรเตอร์ของคอลเลกชัน NodeList
เรียกใช้มันต่อเนื่องกัน
จนกว่าองค์ประกอบของคอลเลกชันจะหมด
รับอิเทอเรเตอร์ของคอลเลกชัน HTMLCollection
เรียกใช้มันต่อเนื่องกัน
จนกว่าองค์ประกอบของคอลเลกชันจะหมด