Skip to content

Latest commit

Β 

History

History
82 lines (58 loc) Β· 2.79 KB

iterators-and-generators.md

File metadata and controls

82 lines (58 loc) Β· 2.79 KB

μ΄ν„°λŸ¬λΈ” (Iterables)

객체가 Symbol.iteratorν”„λ‘œνΌν‹°μ— λŒ€ν•œ κ΅¬ν˜„μ„ 가지고 μžˆλ‹€λ©΄ μ΄ν„°λŸ¬λΈ”λ‘œ κ°„μ£Όν•©λ‹ˆλ‹€. Array, Map, Set, String, Int32Array, Uint32Array λ“±κ³Ό 같은 일뢀 λ‚΄μž₯ νƒ€μž…μ—λŠ” 이미 Symbol.iterator ν”„λ‘œνΌν‹°κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 객체의 Symbol.iterator ν•¨μˆ˜λŠ” λ°˜λ³΅ν•  κ°’ λͺ©λ‘μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

for..of λ¬Έ

for..ofλŠ” 객체의 Symbol.iterator ν”„λ‘œνΌν‹°λ₯Ό ν˜ΈμΆœν•˜μ—¬, μ΄ν„°λŸ¬λΈ” 객체λ₯Ό λ°˜λ³΅ν•©λ‹ˆλ‹€. λ‹€μŒμ€ λ°°μ—΄μ˜ κ°„λ‹¨ν•œ for..of λ£¨ν”„μž…λ‹ˆλ‹€:

let someArray = [1, "string", false];

for (let entry of someArray)
 console.log(entry); // 1, "string", false
}

for..of vs. for..in λ¬Έ

for..of 및 for..in λ¬Έ λͺ¨λ‘ λͺ©λ‘μ„ λ°˜λ³΅ν•©λ‹ˆλ‹€; λ°˜λ³΅λ˜λŠ” 값은 λ‹€λ₯΄μ§€λ§Œ, for..in은 λ°˜λ³΅λ˜λŠ” 객체의 ν‚€ λͺ©λ‘μ„ λ°˜ν™˜ν•˜κ³ , λ°˜λ©΄μ— for..ofλŠ” λ°˜λ³΅λ˜λŠ” 객체의 숫자 ν”„λ‘œνΌν‹° κ°’ λͺ©λ‘μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ μ΄λŸ¬ν•œ 차이점을 λ³΄μ—¬μ£ΌλŠ” μ˜ˆμž…λ‹ˆλ‹€.

let list = [4, 5, 6];

for (let i in list){
 console.log(i); // "0", "1", "2"
}

for (let i of list){
 console.log(i); // "4", "5", "6"
}

또 λ‹€λ₯Έ 차이점은 for..in은 λͺ¨λ“  κ°μ²΄μ—μ„œ μž‘λ™ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€; 객체의 ν”„λ‘œνΌν‹°λ₯Ό κ²€μ‚¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. λ°˜λ©΄μ— for..ofλŠ” μ΄ν„°λŸ¬λΈ” 객체의 값에 주둜 관심이 μžˆμŠ΅λ‹ˆλ‹€. Map 및 Setκ³Ό 같은 λ‚΄μž₯ κ°μ²΄λŠ” μ €μž₯된 값에 μ ‘κ·Όν•  수 μžˆλŠ” Symbol.iterator ν”„λ‘œνΌν‹°λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";

for (let pet in pets){
 console.log(pet); // "species"
}

for (let pet of pets){
 console.log(pet); // "Cat", "Dog", "Hamster"
}

μ½”λ“œ 생성 (Code generation)

ES5 및 ES3 νƒ€κ²ŒνŒ… (Targeting ES5 and ES3)

ES5 λ˜λŠ” ES3-ν˜Έν™˜ 엔진을 λŒ€μƒμœΌλ‘œ ν•˜λŠ” 경우, λ°˜λ³΅μžλŠ” Array μœ ν˜•μ˜ κ°’λ§Œ ν—ˆμš©ν•©λ‹ˆλ‹€. 이런 배열이 μ•„λ‹Œ 값이 Symbol.iterator ν”„λ‘œνΌν‹°λ₯Ό κ΅¬ν˜„ν•˜λ”λΌλ„ 배열이 μ•„λ‹Œ κ°’μ—μ„œ for..of 루프λ₯Ό μ‚¬μš©ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬λŠ” for..of 루프에 λŒ€ν•œ κ°„λ‹¨ν•œ for 루프λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€, 예λ₯Ό λ“€λ©΄:

let numbers = [1, 2, 3];
for (let num of numbers){
 console.log(num);
}

λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±ν•©λ‹ˆλ‹€:

var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++){
 var num = numbers[_i];
 console.log(num);
}

ECMAScript 2015 및 μƒμœ„ 버전 νƒ€μΌ€νŒ… (Targeting ECMAScript 2015 and higher)

ECMAScipt 2015-ν˜Έν™˜ 엔진을 νƒ€μΌ€νŒ…ν•˜λŠ” 경우, μ»΄νŒŒμΌλŸ¬λŠ” μ—”μ§„μ˜ λ‚΄μž₯ 반볡자 κ΅¬ν˜„μ„ λŒ€μƒμœΌλ‘œ ν•˜λŠ” for..of 루프λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.