SlideShare a Scribd company logo
ECMAScript 2015
by jbee
[ES6] 3. Iteration and for‑of statement
Iteration
ES6에서이터레이션프로토콜은 Iterable 프로토콜 과  Iterator 프로토
콜 로구성된다. 결론부터말하자면 Iterable 프로토콜은 반복 가능한 오
브젝트를나타내는프로토콜이며 Iterator 프로토콜은이터러블오브젝트
( Iterable 프로토콜을따르는오브젝트)의값을 작성한 순서대로 처리하는
프로토콜이다.
Iterable 프로토콜
오브젝트의반복처리규약을정의한다.
Iterable Object
 String ,  Array ,  Map ,  Set ,  TypedArray ,  Argument 오브젝트
그리고 DOM의 NodeList 
iterator
위built in 오브젝트들은디폴트로이터러블프로토콜을갖고 있다.
오브젝트에 Symbol.iterator 가 있어야한다.  Symbol.iterator 가 있
는오브젝트는이터러블오브젝트이다. 또한상속받은prototype chain에있
어도이터러블오브젝트이다. ( Symbol 에대해서는다음포스팅에서다룰예
정이다.)
오브젝트에프로퍼티존재여부를체크할때, Symbol의경우에는
 arrayObj[Symbol.iterator] 와같이대괄호 [] 안에작성해야한다.
let arr = [];
console.log(arr[Symbol.iterator]); //function values() { [nativ
let obj = {a:1};
console.log(obj[Symbol.iterator]); //undefined
 Array 오브젝트는기본적으로 iterable 프로토콜을구현한다. 하지만
 Object 오브젝트는 iterable 프로토콜을구현하지않는다.
위와같은방식으로 Array 오브젝트는 iterator 를받을수있다.
let iteratorObj = arr[Symbol.iterator](); //iterator object
JavaScript’s for statement
forEach
forEach 문은arrow function과 조합해서사용하면추가적인변수사용없이
코드가 깔끔해질수있다.
const categories = ["Korean", "English", "Science"];
categories.forEach(subject => {
console.log(subject);
});
// console>
// Korean
// English
// Science
forEach 한계
그러나for문중간에 continue or  break or  return 선언문을사용할
수없다. 기존의for‑statement를사용하는경우를보자.
const categories = ["Korean", "English", "Science"];
for (let i = 0; i < subject.length; i++) {
console.log(categoried[i]);
}
// console>
// Korean
// English
// Science
 i 의역할이index를잡아주는것 외에별다른기능이없다. 그래서기존에는
 for-in statement 를사용했다. 하지만 for-in statement 은문자열
키를가진일반 Object 객체들을위해만들어졌다.
const categories = ["Korean", "English", "Science"];
for (let item in categories) {
console.log(item);
}
// console>
// 0
// 1
// 2
배열을for‑in으로돌리면그 index가 추출된다.
for‑of statement
 for-in loop statement 는객체의프로퍼티들을루프시키지만 for-of
loop statement 는데이터, 즉배열내의value들을루프시킨다. 또한for‑
of는배열뿐만아니라다양한Collection에도동작한다. DOM의
 NodeList 같은유사배열객체들에도동작하고 문자열에도동작한다. 문자
열을유니코드문자의배열로취급하는것이다.  Set ,  Map 에대해서도물론
동작한다. key‑value 형식의 Map 에대해서는for (let [key, value] of …) 형
식의 destructuring 을사용한다.
const categories = ["Korean", "English", "Science"];
for (let item of categories) {
console.log(item);
}
// console>
// Korean
// English
// Science
단for‑of 가 만능은아니다.  Object 의프로퍼티를루프시키려면 for-in
statement 를사용해야한다. 사실 for-in statement 의원래목적이
 Object 프로퍼티순회이다. Object를순회하는경우를살펴보자.
let obj = {
one : 1,
two : 2,
three : 3
};
위와같은obj라는오브젝트를정의한다.
for (let key in obj) {
console.log(key);
}
// console>
// one
// two
// three
 for-in statement 를통해서정의한오브젝트(obj)의key를순회했다. 그
리고 그 key를가지고 value에접근하는방법이다.
for (let key in obj) {
console.log(obj[key]);
}
// console>
// 1
// 2
// 3
오브젝트를 for-of statment 로순회하면어떻게 될까?
JavaScript의Object는 iterable 프로토콜을구현하고 있지않기 때문에,
 Symbol.iterator 가 존재하지않는다.
for (let item of obj) {
console.log(item);
}
// console>
// Uncaught TypeError: obj[Symbol.iterator] is not a function
3. end

More Related Content

What's hot

Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
Vong Sik Kong
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
Park Jonggun
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
Sungchul Park
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
MIN SEOK KOO
 
동작 파라미터와 람다 In java 8
동작 파라미터와 람다 In java 8동작 파라미터와 람다 In java 8
동작 파라미터와 람다 In java 8
진우 이
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
Changwon National University
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
MIN SEOK KOO
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
욱진 양
 
니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트
효준 강
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
Yong Joon Moon
 
Javascript prototype & inheritance
Javascript prototype & inheritanceJavascript prototype & inheritance
Javascript prototype & inheritance
지수 윤
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
Eunjoo Im
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
Mt
MtMt
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
Yong Joon Moon
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
SeungHyun Eom
 
자연어5 | 1차강의
자연어5 | 1차강의자연어5 | 1차강의
자연어5 | 1차강의
김용범 | 무영인터내쇼날
 
C++ inherit virtual
C++ inherit virtualC++ inherit virtual
C++ inherit virtual
송미 이
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3david nc
 

What's hot (20)

Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
 
동작 파라미터와 람다 In java 8
동작 파라미터와 람다 In java 8동작 파라미터와 람다 In java 8
동작 파라미터와 람다 In java 8
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
Javascript prototype & inheritance
Javascript prototype & inheritanceJavascript prototype & inheritance
Javascript prototype & inheritance
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
Mt
MtMt
Mt
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
자연어5 | 1차강의
자연어5 | 1차강의자연어5 | 1차강의
자연어5 | 1차강의
 
C++ inherit virtual
C++ inherit virtualC++ inherit virtual
C++ inherit virtual
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3
 

Similar to [ES6] 3. iteration

파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
Yong Joon Moon
 
Collection framework
Collection frameworkCollection framework
Collection framework
ssuser34b989
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
민태 김
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
중선 곽
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
handfoot
 
Java script
Java scriptJava script
Java script
영남 허
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
Park Jonggun
 

Similar to [ES6] 3. iteration (11)

파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
Collection framework
Collection frameworkCollection framework
Collection framework
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
Java script
Java scriptJava script
Java script
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 

More from Han JaeYeab

07. type system
07. type system07. type system
07. type system
Han JaeYeab
 
06. decorator
06. decorator06. decorator
06. decorator
Han JaeYeab
 
05. generics in typescript
05. generics in typescript05. generics in typescript
05. generics in typescript
Han JaeYeab
 
04. interface in typescript
04. interface in typescript04. interface in typescript
04. interface in typescript
Han JaeYeab
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescript
Han JaeYeab
 
02. class in typescript
02. class in typescript02. class in typescript
02. class in typescript
Han JaeYeab
 
01. basic types
01. basic types01. basic types
01. basic types
Han JaeYeab
 
intro. typescript playground
intro. typescript playgroundintro. typescript playground
intro. typescript playground
Han JaeYeab
 
[ES6] 12. Array
[ES6] 12. Array[ES6] 12. Array
[ES6] 12. Array
Han JaeYeab
 
[ES6] 11. Modularization, import와 export
[ES6] 11. Modularization, import와 export[ES6] 11. Modularization, import와 export
[ES6] 11. Modularization, import와 export
Han JaeYeab
 
[ES6] 10. Generator
[ES6] 10. Generator[ES6] 10. Generator
[ES6] 10. Generator
Han JaeYeab
 
[ES6] 9. Iterator
[ES6] 9. Iterator[ES6] 9. Iterator
[ES6] 9. Iterator
Han JaeYeab
 
[ES6] 8. Symbol
[ES6] 8. Symbol[ES6] 8. Symbol
[ES6] 8. Symbol
Han JaeYeab
 
[ES6] 7. Template literal
[ES6] 7. Template literal[ES6] 7. Template literal
[ES6] 7. Template literal
Han JaeYeab
 
[ES6] 6. Class
[ES6] 6. Class[ES6] 6. Class
[ES6] 6. Class
Han JaeYeab
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. Destructuring
Han JaeYeab
 
[ES6] 4. Spread, Rest parameter
[ES6] 4. Spread, Rest parameter[ES6] 4. Spread, Rest parameter
[ES6] 4. Spread, Rest parameter
Han JaeYeab
 
[ES6] 2. arrow function
[ES6] 2. arrow function[ES6] 2. arrow function
[ES6] 2. arrow function
Han JaeYeab
 
[ES6] 1. let과 const
[ES6] 1. let과 const[ES6] 1. let과 const
[ES6] 1. let과 const
Han JaeYeab
 
클라우드 컴퓨팅에 대한 기본적인 이해
클라우드 컴퓨팅에 대한 기본적인 이해클라우드 컴퓨팅에 대한 기본적인 이해
클라우드 컴퓨팅에 대한 기본적인 이해
Han JaeYeab
 

More from Han JaeYeab (20)

07. type system
07. type system07. type system
07. type system
 
06. decorator
06. decorator06. decorator
06. decorator
 
05. generics in typescript
05. generics in typescript05. generics in typescript
05. generics in typescript
 
04. interface in typescript
04. interface in typescript04. interface in typescript
04. interface in typescript
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescript
 
02. class in typescript
02. class in typescript02. class in typescript
02. class in typescript
 
01. basic types
01. basic types01. basic types
01. basic types
 
intro. typescript playground
intro. typescript playgroundintro. typescript playground
intro. typescript playground
 
[ES6] 12. Array
[ES6] 12. Array[ES6] 12. Array
[ES6] 12. Array
 
[ES6] 11. Modularization, import와 export
[ES6] 11. Modularization, import와 export[ES6] 11. Modularization, import와 export
[ES6] 11. Modularization, import와 export
 
[ES6] 10. Generator
[ES6] 10. Generator[ES6] 10. Generator
[ES6] 10. Generator
 
[ES6] 9. Iterator
[ES6] 9. Iterator[ES6] 9. Iterator
[ES6] 9. Iterator
 
[ES6] 8. Symbol
[ES6] 8. Symbol[ES6] 8. Symbol
[ES6] 8. Symbol
 
[ES6] 7. Template literal
[ES6] 7. Template literal[ES6] 7. Template literal
[ES6] 7. Template literal
 
[ES6] 6. Class
[ES6] 6. Class[ES6] 6. Class
[ES6] 6. Class
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. Destructuring
 
[ES6] 4. Spread, Rest parameter
[ES6] 4. Spread, Rest parameter[ES6] 4. Spread, Rest parameter
[ES6] 4. Spread, Rest parameter
 
[ES6] 2. arrow function
[ES6] 2. arrow function[ES6] 2. arrow function
[ES6] 2. arrow function
 
[ES6] 1. let과 const
[ES6] 1. let과 const[ES6] 1. let과 const
[ES6] 1. let과 const
 
클라우드 컴퓨팅에 대한 기본적인 이해
클라우드 컴퓨팅에 대한 기본적인 이해클라우드 컴퓨팅에 대한 기본적인 이해
클라우드 컴퓨팅에 대한 기본적인 이해
 

[ES6] 3. iteration