Iterable 이라는 것은 일종의 개념입니다. 반복가능하다 라는 개념인데, 이러한 개념을 이용하면
다시말하면 for ... of 구문의 사용이 가능한 객체를 Iterable이라 부릅니다.
// Iterable 객체 만들기
let range = {
from: 1,
to: 5,
};
//for ... of 호출시 가장처음 [Symbol.iterator] () {} 이 호출됩니다.
range[Symbol.iterator] = function () {
return {
current: this.from,
last: this.to,
// for ... of 반복문에 의해 반복마다 next()가 호출됩니다.
// next()함수는 반환형태가 {done: , value: } 입니다.
// 다음 반복구조가 가능한 상태일 때 {done: false, value: something}
// 더이상 반복구조가 불가능 할때 {done: true} 를 반환합니다.
next() {
if (this.current <= this.last)
return { done: false, value: this.current++ };
else return { done: true };
// next 함수는 현재
},
};
//Symbol.iterator은 Iterable한 객체를 반환합니다.
};
for (const item of range) console.log(item);
이렇게 Iterable한 자료형에는 next(), Symbol.iterator 형태의 함수가 존재합니다. 이러한 자료형으로서는 문자열
, Set
, Map
, Array
가 있습니다.
const testArr = [1, 2, 3, 4, 5];
for (const item of testArr) {
console.log(item);
}
//1
//2
//3
//4
//5
.map 과 매우 유사하다. const item은 배열의 원소와 매칭되어진다.
다만 반복문을 돌다가 continue, break, return 같은 것을 넣어 반복중간 코드를 끊을수 없다.
arr.entries()
const testArr = ['one', 'two', 'three', 'four']; console.log([...testArr.entries()]); for (const [index, item] of testArr.entries()) { console.log(`${index} : ${item}`); } //(4) [Array(2), Array(2), Array(2), Array(2)] //0 : one //1 : two //2 : three //3 : four
배열의 원소와 함께 인덱스를 함께 배열로 묶어주는 함수이다. 배열의 자체 기능이다.
// ES2020 enhanced object literal
const talent = 'coding';
const testObj = {
gender: 'male',
};
const testObj2 = {
name: 'doodream',
age: 28,
...testObj,
talent,
// ===
// talent : talent
};
console.log(testObj2);
위 코드와 같이 변수의 이름과 객체 속성의 이름을 같게 지을 경우에는 :를 붙여서 중복 코드를 작성할 필요는 없다.
const testObj = {
name: 'doodream',
printName() {
console.log(this.name);
},
/*
printName: function () {
console.log(this.name);
},
*/
};
console.log(testObj.printName());
ES2020 부터 생겨난 구문이다.
?.
문구를 쓰는 경우이다. optional chaining 이라는 경우를 보자
const testObj = {
name: 'doodream',
printName() {
console.log(this.name);
},
};
if (testObj.age) console.log(testObj.age);// 실행 안됨
testObj.age ?? console.log(testObj.age)// undefined
console.log(testObj?.age);// undefined
console.log(testObj?.age?.adult?...)// undefined
const game = {
team1: 'Bayern Munich',
team2: 'Borrussia Dortmund',
players: [
[
'Neuer',
'Pavard',
'Martinez',
'Alaba',
'Davies',
'Kimmich',
'Goretzka',
'Coman',
'Muller',
'Gnarby',
'Lewandowski',
],
[
'Burki',
'Schulz',
'Hummels',
'Akanji',
'Hakimi',
'Weigl',
'Witsel',
'Hazard',
'Brandt',
'Sancho',
'Gotze',
],
],
score: '4:0',
scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'],
date: 'Nov 9th, 2037',
odds: {
team1: 1.33,
x: 3.25,
team2: 6.5,
},
};
console.log(Object.values(game.odds));//(3) [1.33, 3.25, 6.5]
console.log(Object.keys(game.odds));// (3) ["team1", "x", "team2"]
각 객체에 대하서 순서는 상관없이 각 프로퍼티의 키와 키에 해당하는 값만 따로 추출하여 만든 배열을 의미한다. 함수도 그대로 들어간다.