함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다.
constlist= [1, 2, 3];
for (vari= 0;i<list.length;i++) {
log(list[i]);
}
conststr= 'abc'
for (vari= 0;i<str.length;i++) {
log(str[i]);
}
for(const a oflist) {
log(a)
}
for(const a ofstr) {
log(a)
}
log('-------- Arr --------');
constarr= [1, 2, 3];
for (const a ofarr)log(a);
log('-------- Set --------');
constset= newSet([1, 2, 3]);
for (const a ofset)log(a);
log('-------- Map --------');
constmap= newMap([['a', 1], ['b', 2], ['c', 3]]);
for (const a ofmap)log(a);
Array는 값을 조회를 할 수 있다.
Set도 값을 조회할 수 있을까?
Set은 값을 조회할 수 없다.
이 말은, Array와 같이 for of 문이 생기지 않았다는 것을 의미한다.
Map도 마찬가지다.
arr, set, map의 생김새는 다음과 같다.
Symbol.iterator
은 어떤 객체의 key로 사용될 수 있다.
arr[Symbol.iterator]
는
라고 나온다.
arr[Symbol.iterator] = null
이라고 함수를 없애면
이라고 arr은 이터러블이 아니라고 에러가 난다.
이말은 즉, arr은 이터러블 이라는 말이다.
이터러블은, 이터레이터를 리턴하는 [Symbol.iterator]()
를 가진 값 이다.
이터레이터는, { value, done }
객체를 리턴하는 next()
를 가진 값 이다.
Map에서 keys()
, values()
, entries()
속성
for (const a of map.keys()) log(a);
for (const a of map.values()) log(a);
for (const a of map.entries()) log(a);
이터레이터를 리턴하는 [Symbol.iterator]()
를 가진 값
{ value, done }
객체를 리턴하는 next()
를 가진 값
이터러블을 for...of
, 전개 연산자 등과 함께 동작하도록 한 규약
constiterable= {
[Symbol.iterator]() {
let i = 3;
return {
next() {
return i == 0 ? { done: true } : { value: i--, done: false };
}
}
}
};
letiterator=iterable[Symbol.iterator]();
for (const a ofiterable)log(a);
consta= [1, 2];
log([...a, ...[3, 4], ...arr, ...set, ...map.values(), ...map.keys()])