본문 바로가기

웹언어/자바스크립트 - ES6

[ES6강좌] 8강 반복문 - for of - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. for of 구문


- [ for of ] 구문은 ES6부터 추가된 반복문입니다.

- 공식적으로 된 설명을 보면 반복 가능한 객체의 값을 반복한다고 되어 있습니다.

- array, string, map, NodeList 등을 반복할 수 있습니다. 

- 이 외에도 [ for in ] 구문이라고도 있죠? 그 구문과 비교해서 보도록 하겠습니다. 

 

 

 

## for of 문법

for(let value of object){
	//code
}

- 그러니까 결국 [ for of ]구문은 객체나 배열의 값을 반복해서 반환합니다.

 

 

## for in 문법

for(let key in object){
	//code
}

- 하지만 [ for in ]구문은 객체나 배열의 키(key)를 반복해서 반환합니다.

- 2개의 차이는 아래 예시로 보도록 할게요.

 

 

 

 

 

 

 

 

1) 배열 반복

## 코드 보기

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - For Of</title>
    </head>
    <body>
        
        <script>
            var array = [10,20,30];

            console.log('=====for of=====');

            for(let item of array){
                console.log(item);
            }

            console.log('=====for in=====');

            for(let item in array){
                console.log(item);
            }

            console.log('=====for in : 값호출=====');

            for(let item in array){
                console.log(array[item]);
            }
        </script>
    </body>
</html>

- 일단 첫 번째로는 [ for of ]구문으로, 두 번째는  [ for in ]구문으로 호출해볼게요.

-  [ for of ]구문으로는 값이 아닌 키(key : 여기서는 인덱스 번호)가 호출돼서 다시 한번 값이 호출되게 해 봤습니다.

 

 

 

## 결과 보기

- 결과를 보니까 [ for of ] 구문은 바로 값을 잘 호출해줍니다.

- [ for in ] 구문은 key인 인덱스번호가 반환됩니다.

- 그래서 [ for of ]구문 값을 호출 시  배열명[key] 로 호출해야 가능합니다. 

 

 

 

 

 

 

 

 

2) 객체 반복

## 코드 보기

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - For Of</title>
    </head>
    <body>
        
        <script>
            var person = {
                name: '홍길동',
                age: 20,
                hobby: '넷플릭스보기'
            };

            console.log('=====for in=====');

            for(let item in person){
                console.log(item);
            }

            console.log('=====for of=====');

            for(let item of person){
                console.log(item);
            }
        </script>
    </body>
</html>

- 이번엔 [ for of ] 구문은 에러가 나기 때문에 뒤에 써보겠습니다.

 

 

 

 

## 결과 보기

- 보면 [ for in ]구문은 key를 잘 반환해서 보여주는 것이 확인이 됩니다.

- 하지만 [ for of ] 구문은 에러가 발생되는 것이 확인돼죠? 객체는 값만으로 이루어져 있지 않기 때문입니다.

- 그래서   [ for of ]구문은 컬렉션 되어 있는 객체인 [Symbol.iterator] 속성을 가지고 있어야만 합니다(직접 명시 가능).

 

 

 

 

 

 

3) Object 메서드를 통한 에러 처리

- Object는 통합적인 객체를 의미하는데, 객체니까 속성과 메서드가 있습니다.

- 그중 keys()는 키값을 반환, values()는 값을 반환, entries()는 키와 값을 모두 받을 수 있습니다. 

- 자세한 메서드들은 아래 주소를 참고해주세요.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

 

Object.entries() - JavaScript | MDN

The Object.entries() static method returns an array of a given object's own enumerable string-keyed property key-value pairs.

developer.mozilla.org

- 위에서 에러가 발생된 것은 이것을 통해 처리가 가능합니다.

 

 

## 코드 보기

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - for of구문</title>
    </head>
    <body>
        <script>
            const person = {
                name: '홍길동',
                age: 20,
                hobby: '넷플릭스보기'
            };

            console.log('=====for in=====');
            for(let item in person){
                console.log(item); //키를 반환
            }

            console.log('=====for of=====');
            for(let item of Object.values(person)){
                console.log(item);
            }
        </script>
    </body>
</html>

 

## 결과 보기

- 그럼 value값만 잘 출력됩니다.

 

 

 

 

 

 

☆ 마치며...

- 결과적으로 두 개다 반복하는 구문은 맞습니다. 

- 하지만 [ for of ] VS [ for in ]으로 정리해보자면...

for in : 객체의 키를 반복
for of : 배열 값을 반복

- 물론 키를 잘 호출해서 [ for in ]으로 값도 호출을 할 수 있다는 것을 잘 알아두면 될 듯합니다.

 

 

 

 

 

 

 

 

 

728x90
반응형