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 โจ2016๋ 9์โฉ.
์ ์๋ ค์ง 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 ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ด์ฅํ ํ์
์ ์๋์ ๊ฐ์ต๋๋ค.
Array.prototype[@@iterator]()TypedArray.prototype[@@iterator]()String.prototype[@@iterator]()Map.prototype[@@iterator]()Set.prototype[@@iterator]()
์์ธํ ๋ด์ฉ์ ๋ฐ๋ณต์ฒ๋ฆฌ ํ๋กํ ์ฝ๋ ํ์ธ ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์์
>์ ์ ์ ์ ์ดํฐ๋ ์ดํฐ
์์์ ๊ธฐ์ ํ ๋ฐ์ ๊ฐ์ด ๋ ์์ ์ผ๋ก ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable]; // [1, 2, 3]
๋น์ ํ ์ดํฐ๋ ์ดํฐ
iterable์ @@iterator ๋ฉ์๋๊ฐ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง ์๋ ๊ฒฝ์ฐ ๋น์ ํ ์ดํฐ๋ ์ดํฐ์
๋๋ค. ์ด์ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์คํ์ ์์ธ ํน์ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function
๋ช ์ธ
| Specification |
|---|
| ECMAScriptยฎ 2026 Languageย Specification> # sec-symbol.iterator> |