Iterators and Generators

이터러블

Symbol.iterator 프로퍼티에 대한 구현을 가진 객체는 이터러블로 간주합니다. Array, Map, Set, String, Int32Array, Uint32Array, 등과 같은 내장 타입에는 Symbol.iterator 프로퍼티가 이미 구현되어 있습니다. 객체에 있는 Symbol.iterator 함수는 반복할 값 목록을 반환합니다.

for..of

for..of문은 객체 내부 Symbol.iterator 프로퍼티를 호출해 이터러블 객체를 반복합니다. 다음은 배열의 간단한 for..of 루프입니다:

ts
let someArray = [1, "string", false];
for (let entry of someArray) {
console.log(entry); // 1, "string", false
}

for..of vs. for..in

for..offor..in문은 모두 리스트를 반복하지만 반복하는 값이 다릅니다. for..in은 반복하는 객체의 리스트를 반환하지만 for..of는 반복하는 객체의 숫자 프로퍼티인 리스트를 반환합니다.

다음은 이러한 차이를 보여주는 예시입니다:

ts
let list = [4, 5, 6];
for (let i in list) {
console.log(i); // "0", "1", "2",
}
for (let i of list) {
console.log(i); // "4", "5", "6"
}

또 다른 차이는 for..in이 모든 객체에서 작동한다는 것입니다. 그래서 객체의 프로퍼티를 검사하는 방법으로 사용합니다. 반면에 for..of는 주로 이터러블 객체의 값에 중점을 둡니다. MapSet 같은 내장 객체는 저장된 값에 접근할 수 있는 Symbol.iterator 프로퍼티를 구현합니다.

ts
let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";
for (let pet in pets) {
console.log(pet); // "species"
}
for (let pet of pets) {
console.log(pet); // "Cat", "Dog", "Hamster"
}

코드 생성

ES5 및 ES3 타겟팅

ES5 또는 ES3 호환 엔진을 대상으로 하는 경우, 반복자는 Array 타입 값만 허용합니다. Symbol.iterator 프로퍼티를 구현하더라도 Array가 아닌 값에 for..of 루프를 사용하면 오류가 발생합니다.

컴파일러는 for..of에 대해 간단한 for 루프를 생성합니다, 예를 들면:

ts
let numbers = [1, 2, 3];
for (let num of numbers) {
console.log(num);
}

컴파일러는 위 코드를 다음과 같이 생성합니다:

js
var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++) {
var num = numbers[_i];
console.log(num);
}

ECMAScript 2015 및 상위 버전 타겟팅

ECMAScipt 2015 호환 엔진을 대상으로 하는 경우, 컴파일러는 엔진에서 내장 반복자 구현을 대상으로 하는 for..of 루프를 생성합니다.

The TypeScript docs are an open source project. Help us improve these pages by sending a Pull Request

Contributors to this page:
MHMohamed Hegazy  (57)
SJSowon Jung  (8)
GBGabriel Burdeti  (3)
OTOrta Therox  (2)
KSKevin Sanders  (1)
7+

Last updated: 2024년 3월 18일