Array.prototype[@@iterator]()

Baseline Widely available

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

Array 인스턴스의 [@@iterator]() 메서드는 순회 가능 프로토콜을 구현하며, 배열을 전개 구문이나 for...of 루프와 같이 순회 가능을 기대하는 대부분의 구문에서 사용할 수 있도록 합니다. 이 메서드는 배열의 각 인덱스 값을 산출하는 배열 순회자 객체를 반환합니다.

이 속성의 초기 값은 Array.prototype.values 속성의 초기 값과 동일한 함수 객체입니다.

시도해보기

const array1 = ["a", "b", "c"];
const iterator1 = array1[Symbol.iterator]();

for (const value of iterator1) {
  console.log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

구문

js
array[Symbol.iterator]()

매개변수

없음.

반환 값

Array.prototype.values()와 동일한 반환 값입니다. 이는 배열의 각 인덱스의 값을 산출하는 새로운 순회 가능 순회자 객체입니다.

예제

for...of 루프를 사용한 순회

이 메서드를 직접 호출할 필요는 거의 없습니다. @@iterator 메서드가 있으면 배열을 순회 가능으로 만들 수 있으며, for...of 루프와 같은 순회 구문은 이 메서드를 자동으로 호출하여 반복할 순회자를 얻습니다.

HTML

html
<ul id="letterResult"></ul>

JavaScript

js
const arr = ["a", "b", "c"];
const letterResult = document.getElementById("letterResult");
for (const letter of arr) {
  const li = document.createElement("li");
  li.textContent = letter;
  letterResult.appendChild(li);
}

결과

순회자를 수동으로 부르기

반환된 순회자 객체의 next 메서드를 수동으로 호출하여 순회 과정을 최대한 제어할 수 있습니다.

js
const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol.iterator]();
console.log(arrIter.next().value); // a
console.log(arrIter.next().value); // b
console.log(arrIter.next().value); // c
console.log(arrIter.next().value); // d
console.log(arrIter.next().value); // e

동일한 함수로 문자열과 문자열 배열 처리하기

문자열과 배열은 모두 순회 가능 프로토콜을 구현하기 때문에, 범용 함수는 두 입력을 동일한 방식으로 처리하도록 설계할 수 있습니다. 이는 입력이 배열이거나 적어도 해당 메서드가 있는 객체여야 하는 Array.prototype.values()를 직접 호출하는 것보다 낫습니다.

js
function logIterable(it) {
  if (typeof it[Symbol.iterator] !== "function") {
    console.log(it, "is not iterable.");
    return;
  }
  for (const letter of it) {
    console.log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123은 순회 가능이 아닙니다.

명세서

Specification
ECMAScript® 2025 Language Specification
# sec-array.prototype-%symbol.iterator%

브라우저 호환성

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.iterator]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Uses a non-standard name.
Has more compatibility info.

같이 보기