π‘ μ΄ν°λ¬λΈ (Iterable)
μ΄ν°λ μ΄ν°λ₯Ό κ°μ§ κ°μ²΄μ λλ€.
μ΄ν°λ¬λΈμλ λ¬Έμμ΄, Array, Set, Map λ±μ΄ μμ΅λλ€.
π‘ μ΄ν°λ μ΄ν° (Iterator)
{ value, done }
μ λ°ννλnext()
λΌλ μ΄λ¦μ λ©μλλ₯Ό κ°μ§ κ°μ²΄μ λλ€.
const μ΄ν°λ μ΄ν° = μ΄ν°λ¬λΈ[Symbol.iterator]();
const { value, done } = μ΄ν°λ μ΄ν°.next();
λ₯Ό λ§μ‘±ν΄μΌ ν©λλ€.
done: false
λ₯Ό λ°νν©λλ€.done: true
λ₯Ό λ°νν΄ μλ €μ€λλ€.π‘ Well-Formed μ΄ν°λ μ΄ν° (Iterator)
μ΄ν°λ¬λΈμ²λΌ
for ... of
μ λ£κ³ λ릴 μ μλ μ΄ν°λ μ΄ν°μ λλ€.
μ΄ν°λ¬λΈκ³Ό λΉμ·νκ² μ΄ν°λ μ΄ν°[Symbol.iterator]()
λ₯Ό νλ©΄ μκΈ°μμ μ μ»μ μ μμ΅λλ€.
const μ΄ν°λ μ΄ν° = μ΄ν°λ¬λΈ[Symbol.iterator]();
const μκΈ°μμ = μ΄ν°λ μ΄ν°[Symbol.iterator]();
console.log(μ΄ν°λ μ΄ν° === μκΈ°μμ ); // true μΆλ ₯
β μ μ΄ν°λ μ΄ν°κ° μλ κΈ°μ‘΄μ μ΄ν°λ μ΄ν°λ₯Ό λ€μ λ΄λ±λ μ΄μ λ?
π μ²μλΆν° λ€μ μννλ μ΄ν°λ¬λΈκ³Όλ λ¬λ¦¬ μ΄ν°λ μ΄ν°λ₯Ό λ릴 κ²½μ° λλ¨Έμ§ λΆλΆλ§ μννκΈ° μν΄μμ λλ€!
const μ΄ν°λ¬λΈ = [1, 2, 3];
const μ΄ν°λ μ΄ν° = μ΄ν°λ¬λΈ[Symbol.iterator]();
console.log(μ΄ν°λ μ΄ν°.next()); // { value: 1, done: false } μΆλ ₯
// μΌμ΄μ€ A: μ΄ν°λ¬λΈλ‘ μν
for (const item of μ΄ν°λ¬λΈ) console.log(item); // 1 2 3 μΆλ ₯
// μΌμ΄μ€ B: μ΄ν°λ μ΄ν°λ‘ μν
for (const item of μ΄ν°λ μ΄ν°) console.log(item); // 2 3 μΆλ ₯
π μ 리
μ΄ν°λ¬λΈ / μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μνλ©΄
ES6+μ
for ... of
/...
μ°μ°μ / μ λ€λ μ΄ν° λ±μ μ΄μ©ν μ μμ΄ νΈλ¦¬ν©λλ€.