๐ Chapter 2 : ๋ฐฐ์ด๋ก ๋ฐ์ดํฐ ์ปฌ๋ ์ ์ ๊ด๋ฆฌํ๋ผ.
๐ฏ ๋ฐฐ์ด๋ก ์ ์ฐํ ์ปฌ๋ ์ ์ ์์ฑํ๋ผ.โ
- ๋ฐ์ดํฐ ์ปฌ๋ ์
์ ๋ค๋ฃจ๋ ๊ตฌ์กฐ๋ก
Map
,Set
,WeakMap
, ๊ฐ์ฒด, ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์๋ค. - ๋ฐฐ์ด์ ์ฌ๊ธฐ์ ๊ธฐ ์ด๋์๋ ๋ฑ์ฅํ๋๋ฐ, ๋ฐฐ์ด์ ์ดํฐ๋ฌ๋ธ(iterable) ์ด ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. (
Iterator
์Generator
) iterable
์ ๊ฐ๋จํ ๋งํด ์ปฌ๋ ์ ์ ํ์ฌ ์์น๋ฅผ ์๊ณ ์๋ ์ํ์์ ์ปฌ๋ ์ ์ ํญ๋ชฉ์ ํ ๋ฒ์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.String
,Array
,TypedArray
,Map
๋ฐSet
์ ๋ชจ๋ ๋ด์ฅ ๋ฐ๋ณต ๊ฐ๋ฅ ๊ฐ์ฒด์ด๋ค. ๊ทธ๋ค์ ํ๋กํ ํ์ ๊ฐ์ฒด๊ฐ ๋ชจ๋Symbol.iterator
๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.- ์ปฌ๋ ์ ๊ฐ๋ ์ ๊ฑฐ์ ๋๋ถ๋ถ์ ๋ฐฐ์ด ํํ๋ก ํํํ ์ ์๋ค. ์ฆ, ๋ฐฐ์ด์ ํน๋ณํ ์ปฌ๋ ์ ์ผ๋ก ์ฝ๊ฒ ๋ณํํ๊ฑฐ๋ ๋ค์ ๋ฐฐ์ด๋ก ๋ง๋ค ์ ์๋ค.
- ํค-๊ฐ ์์ ์ฌ์ฉํด ๋งต ๊ฐ์ฒด์ ๋ฐฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ์ ์๋๋ฐ TC39 ์์ํ์์
Object.entries()
๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ํค-๊ฐ ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ๋ช ์ธ๋ฅผ ํ์ ํ๋ค.(ES2017)
๐ฏ Includes()๋ก ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ผ.โ
includes
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ์๋ ๊ฐ์ ์์น๋ฅผ ํ์ธํ์ง ์๊ณ ๋ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.- ์๋ ์์ ์ ๊ฐ์ด ํน์ ๋ฌธ์์ด์ ํฌํจ ํ๊ณ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ฌธ์์ด์ ์์น๋ฅผ ์ฐพ์์ผ ํ๋ค.
const sections = ['contact','shipping'];
function displayShipping(sections){
return sections.indexOf('shipping') > -1;
}
// true
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ES2016์์ ์ถ๊ฐ๋
includes
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๊ฑฐ๋ก์ด ๋น๊ต ์ ์ฐจ๋ฅผ ์๋ตํ ์ ์๋ค. includes
๋ผ๋ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ด ๋ฐฐ์ด์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ boolean๊ฐ์ผ๋กtrue
๋๋false
๋ฅผ ๋ฐํํ๋ค.
const sections = ['contact','shipping'];
function displayShipping(sections){
return sections.includes('shipping');
}
// true
๐ฏ ํผ์นจ ์ฐ์ฐ์๋ก ๋ฐฐ์ด์ ๋ณธ๋ ๋ผ.โ
- ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง ๋ฐฐ์ด์๋ ์๋ง์ ๋ฉ์๋๊ฐ ์์ผ๋ฏ๋ก ํผ๋์ค๋ฝ๊ฑฐ๋ ์กฐ์๊ณผ ๋ถ์ ํจ๊ณผ(side effect)๋ก ์ธํ ๋ฌธ์ ์ ๋ง๋ฅ๋จ๋ฆด ์ ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํผ์นจ ์ฐ์ฐ์(Spread syntax)๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ํ์ ์ฝ๋๋ก ๋ฐฐ์ด์ ๋น ๋ฅด๊ฒ ์์ฑํ๊ณ ์กฐ์ํ ์ ์๋ค.
- ํผ์นจ ์ฐ์ฐ์๋ ๋ฐฐ์ด์๋ง ๊ตญํ๋์ง ์๊ณ ๋งต ์ปฌ๋ ์ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ํจ์์์๋ ํผ์นจ ์ฐ์ฐ์์ ๋ค๋ฅธ ํํ์ธ ๋๋จธ์ง ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ํ, ํผ์นจ ์ฐ์ฐ์๋ ์ ๋๋ ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ํด๋์ค ์์ฑ์๋ ์ฌ์ฉํ ์ ์๋ค.
- ํผ์นจ ์ฐ์ฐ์๋ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค. ์ ๋ณด๋ฅผ ์ด๋๋ ํผ์ณ ๋ฃ์ด์ผ ํ๋ค.
const cart = ['My Name is SeungMin', 'Helloooooo'];
...cart // error
const copyCart = [...cart]; // ['My Name is SeungMin', 'Helloooooo']
- ๋ค์ ์์๋ ๋ฐฐ์ด์์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ค๊ณ ํ ๋ ๋ฐ๋ณต๋ฌธ๋ง ์ฌ์ฉํ ๊ฒ์ด๋ค.
function removeItem(items, removable){
const updated = [];
for(let i = 0; i < items.length; i++){
if(items[i] !== removable){
updated.push(items[i]);
}
}
return updated;
}
- ์ ์ฝ๋๋ ๋ฐ๋ณต๋ฌธ์ด ๋์ด๋๊ณ ์ด์์ ํด์ง์๋ก ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค.
splice()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฑฐํ ์ ์๋ค.
function removeItem(items, removable){
const index = items.indexOf(removable);
items.splice(index, 1);
return items;
}
- ํ์ง๋ง
splice()
๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ์กฐ์ํ๋ค. - ์๋ณธ ๋ฐฐ์ด์ ์กฐ์ํ๋ ์์ ์ ์ํํ๋ฐ ํนํ ํจ์์์ ์ฌ์ฉํ ๋ ์ํํ๋ค.
- ํจ์์ ์ ๋ฌํ๋ ์ ๋ณด๊ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฌ๋ผ์ง๋ ๊ฒ์ ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ฐฐ์ด์ ์ผ๋ถ๋ฅผ ๋ฐํํ๋
slice()
๋ฅผ ์ฌ์ฉํ๋ค.
function removeItem(items, removable){
const index = items.indexOf(removable);
return items.slice(0, index).concat(items.slice(index + 1));
}