π» 34.1 μ΄ν°λ μ΄μ νλ‘ν μ½
iteration: λ°λ³΅, μν
protocol: μ½μ, κ·κ²©
=> μ΄ν°λ μ΄μ νλ‘ν μ½μ λ°λ₯Έλ€λ κ²μ μνκ° κ°λ₯νλ€ λΌκ³ λ λ§ν μ μλ€.
=> μ΄ν°λ μ΄μ νλ‘ν μ½μ λ°λ₯΄λ κ°μ²΄λ for...of λ spread μ°μ°μλ₯Ό μ¬μ©ν μ μλ€.
μ΄λ€ κ°μ²΄λ μ§ μνκ° κ°λ₯ν κ°μ²΄κ° λκΈ° μν΄μλ iterable νλ‘ν μ½μ λ°λΌμΌνλ€.
[Symbol.iterator](): Iterator νλ‘ν μ½
-> μ΄ ν¨μλ₯Ό λ§λ€λ©΄? μνκ° κ°λ₯ν μ€λΈμ νΈκ° λλ€.
-> κ·Έλ¦¬κ³ μ΄ ν¨μ μμμ Iterator νλ‘ν μ½μ λ°λ₯΄λ, μ¦ μννλ λ°λ³΅μλ₯Ό 리ν΄νλ κ°μ²΄λ₯Ό λ§λ€λ©΄ λλ€.
π μ΄ν°λ μ΄μ νλ‘ν μ½
μν κ°λ₯ν λ°μ΄ν° 컬λ μ μ λ§λ€κΈ° μν΄ ECMAScript μ¬μμ μ μνμ¬ λ―Έλ¦¬ μ½μν κ·μΉ.
- μ΄ν°λ¬λΈ νλ‘ν μ½
: μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν κ°μ²΄
: for...of λ¬ΈμΌλ‘ μνν μ μμΌλ©° μ€νλ λ λ¬Έλ²κ³Ό λ°°μ΄ λμ€νΈλμ²λ§ λμμΌλ‘ μ¬μ©λ μ μλ€.
- μ΄ν°λ μ΄ν° νλ‘ν μ½
: Symbol.iterator λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν μ΄ν°λ μ΄ν°λ₯Ό λ°ν.
: μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν κ°μ²΄λ₯Ό μ΄ν°λ μ΄ν°λΌκ³ νλ€. -> μ΄ν°λ¬λΈμ μμλ₯Ό νμνκΈ° μν ν¬μΈν° μν μ νλ€.
34.1 μ΄ν°λ¬λΈ
Symbol.iterator λ©μλλ₯Ό μ§μ ꡬννκ±°λ νλ‘ν νμ 체μΈμ ν΅ν΄ μμλ°μ κ°μ²΄λ₯Ό λ§νλ€.
- Map, Set, λ°°μ΄, λ¬Έμμ΄ λ±μ μ΄ν°λ¬λΈμ΄λ€.
μΌλ° κ°μ²΄λ for...of λ¬ΈμΌλ‘ μνν μ μλ€.
νμ§λ§ μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μνλλ‘ κ΅¬ννλ©΄ μ΄ν°λ¬λΈμ΄ λ μ μλ€.
34.2 μ΄ν°λ μ΄ν°
Symbol.iterator λ©μλλ₯Ό νΈμΆνλ©΄ -> μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν μ΄ν°λ μ΄ν°λ₯Ό λ°νν¨.
μ΄λ κ² λ°νλ μ΄ν°λ μ΄ν°λ next λ©μλλ₯Ό κ°λλ€.
next λ©μλλ μ΄ν°λ¬λΈμ κ° μμλ₯Ό μννκΈ° μν ν¬μΈν°μ μν μ νλ€.
-> μμ°¨μ μΌλ‘ νλ¨κ³μ© μννλ©°, μν κ²°κ³Όλ₯Ό λνλ΄λ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°ννλ€.
π» 34.2 λΉνΈμΈ μ΄ν°λ¬λΈ
JS λ μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μν κ°μ²΄μΈ λΉνΈμΈ μ΄ν°λ¬λΈμ μ 곡.
- Array
- String
- Map
- Set
- TypedArray
- arguments
- DOM 컬λ μ
π» 34.3 for...of λ¬Έ
for...of λ¬Έμ μ΄ν°λ¬λΈμ μννλ©΄μ μ΄ν°λ¬λΈμ μμλ₯Ό λ³μμ ν λΉνλ€.
for(λ³μμ μΈλ¬Έ of μ΄ν°λ¬λΈ) {...}
μ΄λ κ² μ¬μ©ν μ μλ€.
λ΄λΆμ μΌλ‘ μ΄ν°λ μ΄ν°μ next λ©μλλ₯Ό νΈμΆ -> μν -> 리μ νΈ κ°μ²΄μ value κ°μ λ³μμ ν λΉν¨.
리μ νΈ κ°μ²΄μ done νλ‘νΌν° κ°μ΄ false λ©΄ μν κ³μ, true λ©΄ μν μ€λ¨.
const arr = [1, 2, 3];
const iterator = arr[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
πκ²°κ³Ό
{ value: 1, done: false }
{ value: 2, done: false }
{ value: 3, done: false }
{ value: undefined, done: true }
for...in κ³Ό λ§€μ° μ μ¬νλ€. (<- [[Enumerable]] μ΄ true μΈ νλ‘νΌν°λ₯Ό μννλ©° μ΄κ±°νλ€.
π» 34.4 μ΄ν°λ¬λΈκ³Ό μ μ¬ λ°°μ΄ κ°μ²΄
μ μ¬ λ°°μ΄ κ°μ²΄
- λ°°μ΄μ²λΌ μΈλ±μ€λ‘ νλ‘νΌν° κ°μ μ κ·Όν μ μμ
- length νλ‘ν°νΌλ₯Ό κ°λλ€.
-> for λ¬ΈμΌλ‘ μν κ°λ₯
- νμ§λ§ μ΄ν°λ¬λΈμ΄ μλ μΌλ° κ°μ²΄μ.
-> Symbol.iterator λ©μλκ° μμ.
-> for...of λ¬ΈμΌλ‘ μνλ λΆκ°λ₯
Array.from
μ μ¬ λ°°μ΄ κ°μ²΄ λλ μ΄ν°λ¬λΈμ μΈμλ‘ μ λ¬λ°μ λ°°μ΄λ‘ λ³ν & λ°ν
π» 34.5 μ΄ν°λ μ΄μ νλ‘ν μ½μ νμμ±
μ΄ν°λ¬λΈμ λ°μ΄ν° 곡κΈμμ μν .
μ΄ν°λ μ΄μ νλ‘ν μ½
: 곡κΈμκ° νλμ μν λ°©μμ κ°λλ‘ κ·μ -> λ°μ΄ν° μλΉμκ° ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μκ² μ°κ²°ν΄μ£Όλ μν μ νλ€.
// 보좩 νμ
π» 34.6 μ¬μ©μ μ μ μ΄ν°λ¬λΈ
34.6.1 μ¬μ©μ μ μ μ΄ν°λ¬λΈ ꡬν
- μΌλ° κ°μ²΄λ μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μνλλ‘ κ΅¬ννλ©΄ μ¬μ©μ μ μ μ΄ν°λ¬λΈμ΄ λλ€.
Symbol.iterator λ©μλλ₯Ό ꡬννκ³ μ΄ λ©μλκ° next λ©μλλ₯Ό κ°λ μ΄ν°λ μ΄ν°λ₯Ό λ°ννλλ‘ νλ€.
34.6.2 μ΄ν°λ¬λΈμ μμ±νλ ν¨μ
34.6.3 μ΄ν°λ¬λΈμ΄λ©΄μ μ΄ν°λ μ΄ν°μΈ κ°μ²΄λ₯Ό μμ±νλ ν¨μ
34.6.4 무ν μ΄ν°λ¬λΈκ³Ό μ§μ° νκ°
μ§μ° νκ°
: λ°μ΄ν°κ° νμν μμ μ΄μ κΉμ§λ 미리 λ°μ΄ν°λ₯Ό μμ±νμ§ μλ€κ° λ°μ΄ν°κ° νμν μμ μ΄ μ€λ©΄ κ·ΈλμΌ λΉλ‘μ λ°μ΄ν°λ₯Ό μμ±νλ κΈ°λ²
: λΆνμν λ°μ΄ν°λ₯Ό 미리 μμ±νμ§ μμ λΉ λ₯Έ μ€ν μλλ₯Ό κΈ°λν μ μκ³ , 무νλ ννμ΄ κ°λ₯.
next λ©μλκ° νΈμΆλ λ λ°μ΄ν°κ° μμ±λ¨.
'λ μ λͺ©λ‘ > λͺ¨λ₯λ€ Modern JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ₯λ€] 36μ₯ λμ€νΈλμ²λ§ ν λΉ (0) | 2023.06.04 |
---|---|
[λͺ¨λ₯λ€] 35μ₯ μ€νλ λ λ¬Έλ² (0) | 2023.06.02 |
[λͺ¨λ₯λ€] 32μ₯ String (0) | 2023.05.29 |
[λͺ¨λ₯λ€] 31μ₯ RegExp (0) | 2023.05.27 |
[λͺ¨λ₯λ€] 28μ₯ Number (0) | 2023.05.23 |