Symbol.iterator

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

잘 알려진 Symbol.iterator 심볼은 객체에 대응하는 기본 이터레이터를 지정합니다. for...of와 같이 사용됩니다.

시도해보기

const iterable1 = {};

iterable1[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log([...iterable1]);
// Expected output: Array [1, 2, 3]
Property attributes of Symbol.iterator
쓰기 가능불가능
열거 가능불가능
설정 가능불가능

설명

(for..of 루프의 시작부분과 같이) 객체가 반환될 필요가 있을때는 언제든지@@iterator 메서드는 인수 없이도 호출 할 수 있습니다. 반환된 iterator는 반복할 값을 취득하기 위해 사용됩니다.

Object와 같이 반복동작을 내장하고 있는 형태도 있지만 그렇지 않은 경우도 있습니다. @@iterator 메서드를 가지고 있는 내장형 타입은 아래와 같습니다.

상세한 내용은 반복처리 프로토콜도 확인 해 주시기 바랍니다.

예제

유저 정의 이터레이터

앞에서 기술한 바와 같이 독자적으로 이터레이터를 만드는 것이 가능합니다.

js
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable]; // [1, 2, 3]

비정형 이터레이터

iterable의 @@iterator 메서드가 이터레이터 객체를 반환하지 않는 경우 비정형 이터레이터입니다. 이와 같이 사용하는 경우 실행시 예외 혹은 예상치 못한 버그를 발생할 가능성이 있습니다.

js
var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

명세

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.iterator

브라우저 호환성

BCD tables only load in the browser

관련 정보