πŸ–‡for...of 와 for...in 차이, for...of μ‚¬μš©κΆŒμž₯

junameeΒ·2022λ…„ 9μ›” 10일
0

μžλ°”μŠ€ν¬λ¦½νŠΈ

λͺ©λ‘ 보기
11/11

for...in / for...of

for...in 은 λͺ¨λ“  객체의 μ—΄κ±°κ°€λŠ₯ν•œ 속성에 λŒ€ν•΄ 반볡, 킀에 μ ‘κ·Όν•œλ‹€.

for...of λŠ” λͺ¨λ“  객체가 μ•„λ‹Œ μ»¬λ ‰μ…˜ μ „μš©!
[Symbol.iterator] 속성이 μžˆλŠ” λͺ¨λ“  μ»¬λ ‰μ…˜ μš”μ†Œμ— λŒ€ν•΄ 이 λ°©μ‹μœΌλ‘œ λ°˜λ³΅ν•©λ‹ˆλ‹€. 값을 λ°˜ν™˜ν•œλ‹€.


Symbol

"심볼" 데이터 ν˜•μ‹μ€ κ°’μœΌλ‘œ 읡λͺ…μ˜ 객체 속성(object property)을 λ§Œλ“€ 수 μžˆλŠ” νŠΉμ„±μ„ 가진 μ›μ‹œ 데이터 ν˜•μ‹(primitive data type). 이 데이터 ν˜•μ‹μ€ ν΄λž˜μŠ€λ‚˜ 객체 ν˜•μ‹(object type)의 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ „μš©(private) 객체 μ†μ„±μ˜ ν‚€(key)둜 μ‚¬μš©λ©λ‹ˆλ‹€.

Symbol.iterator

Symbol.iterator 심볼은 객체에 λŒ€μ‘ν•˜λŠ” κΈ°λ³Έ μ΄ν„°λ ˆμ΄ν„°λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 객체가 λ°˜ν™˜λ  ν•„μš”κ°€ μžˆμ„λ•ŒλŠ” μ–Έμ œλ“ μ§€@@iterator λ©”μ„œλ“œλŠ” 인수 없이도 호좜 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°˜ν™˜λœ iteratorλŠ” λ°˜λ³΅ν•  값을 μ·¨λ“ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

@@iterator λ©”μ„œλ“œλ₯Ό 가지고 μžˆλŠ” λ‚΄μž₯ν˜• νƒ€μž…
Array.prototype@@iterator
TypedArray.prototype@@iterator
String.prototype@@iterator (en-US)
Map.prototype@@iterator (en-US)
Set.prototype@@iterator (en-US)


μ»¬λ ‰μ…˜ μš”μ†Œ μˆœν™˜ λΉ„κ΅ν•˜κΈ°

  • array μˆœν™˜
    : for...of λŠ” iterator둜 μ§€μ •λœ ν‚€κ°’λ§Œ νƒμƒ‰ν•˜κ³  킀에 ν•΄λ‹Ήν•˜λŠ” 값을 λ°˜ν™˜ν–ˆλ‹€. 좔후에 μΆ”κ°€λœ typeν‚€λ₯Ό ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€.
    : for...in은 λͺ¨λ“  킀값을 μˆœν™˜ν–ˆλ‹€.
const array = [1,2,3]
array.type = 'arr'
array //[1, 2, 3, type: 'arr']

for(let el of array){
    console.log(el)
}
// 1, 2, 3

for(let el in array){
    console.log(el)
}
// 0, 1, 2, type
  • string μˆœν™˜
const string = 'string'
for (let value of string){
    console.log(value)
}
//s t r i n g

for(let key in string){
  console.log(string[key])
}
//s t r i n g
  • map μˆœν™˜
    : map이 key:valueν˜•νƒœλ‘œμ„œ for...of문으둜 μˆœνšŒν•  λ•Œ key, value둜 λ‚˜λˆ„μ–΄ μ‘°νšŒκ°€λŠ₯ν•˜λ‹€.
    λ‚΄λΆ€ ν‚€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ for...in으둜 μ‘°νšŒκ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);

for (let entry of iterable) {
  console.log(entry);
}
// [a, 1]
// [b, 2]
// [c, 3]

for (let [key, value] of iterable) {
  console.log(value);
}
// 1
// 2
// 3
  • set μˆœν™˜
    κ°’ 자체λ₯Ό μ €μž₯ν•˜λŠ” set, for...of λ¬Έ μ‘°νšŒμ‹œ κ°’ 자체λ₯Ό λ°˜ν™˜. λ‚΄λΆ€ ν‚€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ for...in으둜 μ‘°νšŒκ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.
let iterable = new Set([1, 1, 2, 2, 3, 3]);

for (let value of iterable) {
  console.log(value);
}
// 1
// 2
// 3

for...in 을 μ‚¬μš©ν•˜λŠ” 경우?

for...in은 λͺ¨λ“  객체λ₯Ό 탐색할 수 μžˆλŠ” νŽΈν•¨μ΄ μžˆμ§€λ§Œ, μœ„μ²˜λŸΌ μ½œλ ‰μ…˜ μš”μ†Œλ“€μ—μ„œλŠ” λΆˆκ°€λŠ₯ν•˜κ³  λ°°μ—΄μ—μ„œ μ •μˆ˜μ•„λ‹Œ(μ˜ˆμ‹œμ˜ - 0,1,2) μ΄λ¦„μ˜ 속성(μ˜ˆμ‹œ - type)을 λ°˜ν™˜ν•˜κ²Œ λ˜λ©΄μ„œ μ‘°μ°¨ μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μˆœμ„œκ°€ μ€‘μš”ν•œ 배열을 μˆœν™˜ν•  λ•ŒλŠ” forλ°˜λ³΅λ¬Έμ΄λ‚˜ forEach, map, for...ofλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λœλ‹€.

for...in은 μ‰½κ²Œ 객체 속성에 μ ‘κ·Όν•  수 있기 λ•Œλ¬Έμ— μ‹€μ œλ‘œλŠ” λ””λ²„κΉ…μš©μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λœλ‹€. κ²°κ΅­ μ‚¬μš©ν•˜μ§€ λ§λΌλŠ” 이야기 ^_^?
객체탐색을 ν•  땐 객체자체λ₯Ό μˆœν™˜ν•˜κΈ°λ³΄λ‹€ Object.keys(obj) λ°©μ‹μ²˜λŸΌ λ°°μ—΄λ‘œ λ³€κ²½ν•˜μ—¬ μˆœν™˜ν•˜λŠ” 것이 μ’‹λ‹€.


참고링크 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...in#%EC%84%A4%EB%AA%85

profile
μ•„ν‹°ν΄λ¦¬μŠ€νŠΈ - bit.ly/3wjIlZJ

0개의 λŒ“κΈ€