자바스크립트 for... in과 for.. of의 차이점에 대하여

2020. 12. 21. 16:36·개발/JavaScript

for.. in과 for...of 구문 모두 무언가를 순회할 때 사용합니다. 주된 차이점은 '순회 대상'입니다.

이 글은 for...of, MDN 일부를 번역한 것입니다.

for...in 구문은 객체의 열거 가능한 속성(enumerable properties)을 임의의 순서로 순회합니다. for...of 구문은 순회할 수 있는 객체의 값(values)을 순회합니다.

 

아래의 예시를 통해 Array에서 for..in반복문과 for...of 반복문이 사용될 때의 차이점을 살펴볼 수 있습니다.

Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};

const iterable = [3, 5, 7];
iterable.foo = 'hello';

for (const i in iterable) {
  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (const i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // logs 0, 1, 2, "foo"
  }
}

for (const i of iterable) {
  console.log(i); // logs 3, 5, 7
}

위 코드를 하나씩 차례로 살펴보도록 하겠습니다.

Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};

const iterable = [3, 5, 7];
iterable.foo = 'hello';

먼저 첫 번째 부분입니다. 모든 객체는 Object.prototype.objCustom을 따라 objCustom 속성을 상속받으며, Array.prototype.arrCustom을 따라 Array인 모든 객체는 arrCustom 속성을 상속받습니다. iterable 객체는 상속과 프로토타입 체인을 따라 objCustom과 arrCustom 속성을 상속받습니다. 여기까지는 간단히 이해할 수 있습니다.

for (const i in iterable) {
  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}

두 번째 부분입니다. 위 for.. in 반복문은 정의를 따라 iterable 객체의 열거 가능한 속성만을 임의의 순서로 출력합니다. 열거 가능한 속성이 아닌 3, 5, 7, hello 를 출력하지 않는 이유는 이들이 속성이 아니라 값이기 때문입니다.

for (const i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // logs 0, 1, 2, "foo"
  }
}

세 번째 부분입니다. 이는 두 번째 부분과 유사하지만 열거 가능한 속성이 객체의 자체 속성인지를 판단하는 hasOwnProperty()를 사용하고 있습니다. 따라서, 0, 1, 2, foo는 자체 속성이기 때문에(상속이 아님) 출력되지만, 상속받은 arrCustom, objCustom은 출력되지 않습니다.

for (const i of iterable) {
  console.log(i); // logs 3, 5, 7
}

이제 마지막으로 for... of를 살펴볼 차례입니다. 이는 정의에 따라 iterable 객체의 속성이 아닌 값을 출력합니다. 따라서 객체의 요소인 3, 5, 7이 출력되었습니다.

 

이상으로 for..in 구문과 for...of 구문의 차이점에 대해 살펴봤습니다. 정리하자면, for...in 구문은 객체의 열거 가능한 속성을 임의의 순서로 순회하며, for...of 구문은 순회할 수 있는 객체의 값을 순회합니다.

'개발 > JavaScript' 카테고리의 다른 글

자바스크립트 배열 중복 요소 확인하기: indexOf()와 lastIndexOf() 활용  (0) 2021.02.13
자바스크립트 join() 메소드 설명: 배열 요소를 문자열로 연결하기  (0) 2020.12.18
자바스크립트 filter() 메소드 설명  (0) 2020.12.15
'개발/JavaScript' 카테고리의 다른 글
  • 웹 스토리지 API 사용 방법 (로컬 스토리지)
  • 자바스크립트 배열 중복 요소 확인하기: indexOf()와 lastIndexOf() 활용
  • 자바스크립트 join() 메소드 설명: 배열 요소를 문자열로 연결하기
  • 자바스크립트 filter() 메소드 설명
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
Klook.com
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
자바스크립트 for... in과 for.. of의 차이점에 대하여
상단으로

티스토리툴바