Home for...in, for...of
Post
Cancel

for...in, for...of


for…in, for…of



for…in

  • 객체의 열거 가능한 속성들을 순회 할 수 있도록 합니다.
  • 객체의 key 값에 접근이 가능하나 value 값에는 직접 접근 불가합니다.
  • 모든 객체에서 사용이 가능 합니다.

for …in 문을 사용해 배열과 객체의 요소에 접근하는 예제 key 값에서만 접근이 가능하기 때문에 배열에서는 index에 객체에서는 key 값에 접근하게 됩니다. value 값이 궁금하면 arr[i], obj[key]와 같이 key를 이용하는 방식을 사용해 간접적으로 접근 할 수도 있습니다.

1
2
3
4
5
6
7
8
9
10
let arr = ['a' , 'b', 'c']
for (let i in arr){
    console.log(i , arr[i])
}
// 0 a, 1 b, 2 c

let obj = { a: 1, b: 2, c: 3 }
for (let key in obj) { 
    console.log(key, obj[key]); }
// a 1, b 2, c 3

주의사항

  • for …in 문에서는 순서가 보장되지 않으므로 속성들 간의 순서가 중요한 경우 for…in 문법을 사용하지 않는 것이 좋습니다.

for…of

  • 반복 가능한 객체(iterable)를 순회 할 수 있도록 합니다.
  • Array, Map, Set, arguments 등이 해당되며 Object는 해당이 되지 않습니다.

for...of 문은 반복 가능한 객체(iterable)를 순회 할 수 있도록 합니다. iterator 속성이 있는 Array,Map,Set,String 등의 값을 반복할 수 있으며 string 문자열에도 적용할 수 있습니다. for ...of 문은 [Symbol.iterator] 속성을 가지는 대상으로 하기 때문에 객체는 이에 해당하지 않으므로 사용을 하려고 하면 TypeError 가 발생 합니다.

1
2
3
4
5
6
7
8
9
10
11
let arr = ['a', 'b', 'c']
let obj = {a : 1 , b : 2 , c : 3}

for(let i of arr){
  console.log(i)
 } <-- 'a', 'b', 'c'

for(let c of obj){
  console.log(c)
} <-- TypeError: obj is not iterable

for…in VS for…of

for ...in

  • Iterable object 대상으로 합니다.
  • 객체의 모든 열거 가능한 속성에 대해 반복
  • key를 리턴 (배열의 경우 index)

for ...of

  • [Symbol.iterator] 속성을 가지는 collection만 대상으로 함

  • Iterable object이지만, prototype chain에 의한 Iterable은 대상에서 제외 -> Array, Map, Set, String, TypedArray, arguments 등

  • value를 리턴

This post is licensed under CC BY 4.0 by the author.