모던자바스크립트 34장 이터러블

연호·2023년 1월 7일
0

모던자바스크립트

목록 보기
25/28

이터러블

  1. Symbol.iterator를 프로퍼티 키로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속받은 Symbol.iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환한다. 이러한 규약을 이터러블 프로토콜이라하며, 이 규약을 준수한 객체를 이터러블 이라한다. 이터러블은 for...of 문으로 순회할 수 있으며, 스프레드 문법과 배열 디스트럭처링 할당의 대상으로 사용할 수 있다.
// 배열은 Attay.prototype의 Symbol.iterator 메서드를 상속받는 이터러블이다.
const arry = [1,2,3]

console.log(Symbol.iterator in array); // true

// 이터러블인 배열은 for...of 문으로 순회 가능하다.
for (const item of array) {
  console.log(item);
}

// 이터러블인 배열은 스프레드 문법의 대상으로 사용할 수 있다.
console.log([...array]); // [1,2,3]
  1. 이터러블의 Symbol.iterator 메서드가 반환한 이터레이터는 next 메서드를 갖는다.
const array = [1,2,3];

// Symbol.iterator 메서드는 이터레이터를 반환한다.
const iterator = array[Symbol.iterator]();

// Symbol.iterator 메서드가 반환한 이터레애터는 next 메서드를 가진다.
console.log('next' in iterator); // true
  1. for...of문은 이터러블을 순회하면서 이터러블의 요소를 변수에 할당한다.
for(const item of [1,2,3]) {
  // item 변수에 순차적으로 1,2,3이 할당된다.
  console.log(item); // 1 2 3
}
  1. 유사 배열 객체는 마치 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있고 length 프로퍼티를 갖는 객체를 말한다. for 문으로 순회할 수 있고, 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있다. 다만 이터러블이 아닌 일반 객체이므로 Symbol.iterator 메서드가 없으므로 for...of 문으로 순회할 수 없다.
// 유사 배열 객체
const arrayLike = {
  0 : 1,
  1 : 2,
  2 : 3,
  length : 3
};

// 유사 배열 객체는 length 프로퍼티를 갖기 때문에 for문으로 순회 가능.
for(let i = 0; i < arrayLike.length; i++) {
  console.log(arrayLike[i]); // 1 2 3
}
  1. 일반 객체도 이터레이션 프로토콜을 준수하도록 구현하면 사용자 정의의 이터러블이 된다.
profile
뉴비

0개의 댓글