1. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด OOP: Object Oriented Programming ECMAScript ์คํ์ OOP๋ผ๊ณ ์์ฑ๋์ด ์์ ECMAScript is an object-oriented pro
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ด๋ธ ๊ฐ์ข์ ๋ง์ง๋ง ๊ฐ์ข๊ฐ์ค๋ "์๋ฐ์คํฌ๋ฆฝํธ ES6+ ๊ธฐ๋ณธ" ๊ฐ์ข์ ํจ๊ป ES6+ ์คํ์ 95% ์ด์์ ๋ค๋ฃธํนํ, ๋น๋๊ธฐ ํต์ ๊ณผ ๋น๋๊ธฐ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ผํ์ฌํ๋ ์์ํฌ๋ฅผ ๋ง๋๋ ๊ฐ๋ ์ผ๋ก ์ ๊ทผ11๋จ๊ณ๋ก ๋๋์ด ๋จ๊ณ๋ณ๋ก ์ฝ๋ ๊ตฌํ๋น๋๊ธฐ ํต์ ๊ณผ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ ๋ฆฌ
Set ์ค๋ธ์ ํธ์ ์ฐจ์ด์ค๋ธ์ ํธ๋ง value ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์number ๋ฑ์ ํ๋ฆฌ๋ฏธํฐ๋ธ ํ์ ์ฌ์ฉ ๋ถ๊ฐ๊ฐ๋ ์ WeakMap๊ณผ ๊ฐ์value๋ง ์์ฑํ๋ ๊ฒ์ด ๋ค๋ฆvalue์ ์ฐธ์กฐ๊ฐ ๋ฐ๋๋ฉด GC ๋์์ง์ ๋ฉ์๋has(), add(), delete()WeakSet ์ธ์ค
Set ์ค๋ธ์ ํธ๋value(๊ฐ)์ ์ปฌ๋ ์ value1,,, valueN ํํ๋ก ์์ฑSet์ ๋๊ดํธ\[]๊ฐ ํ๋์์ฑํ ์์๋ก ์ ๊ฐ ๋จSet ์ธ์คํด์ค ์์ฑ, ๋ฐํํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์์ฑํ๋ฆฌ๋ฏธํฐ๋ธ, ์ค๋ธ์ ํธ ํ์ ์ฌ์ฉ ๊ฐ๋ฅsize ํ๋กํผํฐSet ์ธ์คํด์ค์ ์๋ฆฌ๋จผํธ ์๋ฅผ ๋ฐํSet
WeakMap์ object๋ง key๋ก ์ฌ์ฉ ๊ฐ๋ฅnumber ๋ฑ์ ํ๋ฆฌ๋ฏธํฐ๋ธ ํ์ ์ฌ์ฉ ๋ถ๊ฐvalue๋ ์ ํ ์์Map์์ key๋ก ์ฐธ์กฐํ object๋ฅผ ์ญ์ ํ๋ฉดobject๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์ง๋งMap์ object๊ฐ ๋จ์๋ฉ๋ชจ๋ฆฌ ๋ฆญ(memory leak) ๋ฐ์Weak
key์ value์ ์ปฌ๋ ์ Map ์ค๋ธ์ ํธ ํํkey, value ํํ์ฒ๋ผ๋๊ดํธ ์์ key์ value๋ฅผ ์์ฑ๋ค์ํ ํ์ ์ key๋ก ์ฌ์ฉํ ์ ์์Map์ key ์ฒ๋ฆฌfor-of ๋ฌธ์์ ์์ฑํ ์์๋๋ก ์ฝํ์งMap ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ผ๋ฏธํฐ์ ์ดํฐ๋ฌ๋ธ ์ค๋ธ์ ํธ
๊ธ๋ก๋ฒ Symbol ๋ ์ง์คํธ๋ฆฌ(registry)์{key: value} ํํ๋ก Symbol์ ์ ์ฅํ๋ผ๋ฏธํฐ()์ ๋ฌธ์์ด์ด key๊ฐ ๋๊ณ Symbol()๋ก ์์ฑํ ๊ฐ์ด value๊ฐ ๋จregistry์ ์ฌ์ ์ ์๋ฏธ: ๋ฑ๋ก, ๊ธฐ๋ก๊ธ๋ก๋ฒ Symbol ๋ ์ง์คํธ๋ฆฌ๋ ๊ณต์ ์์ญ๋ค๋ฅธ
ES2019 ์คํ์์ @@iterator ํํ๋ฅผ ๋ณผ ์ ์์@@๋Well-Known Symbol์ ๋ํ๋ด๋ ๊ธฐํธ@@match์ Symbol.match๊ฐ ๊ฐ์์คํ์์๋ @@match ํํ๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ๋ฐ์๋ Symbol.match ํํ๋ฅผ ์ฌ์ฉES2019 ๊ธฐ์ค: 12๊ฐ We
์๋ฐ์คํฌ๋ฆฝํธ์์ Primitive ๊ฐ์์ค๋ธ์ ํธ๊ฐ ์๋๋ผ ๊ฐ์ด๋ฉฐ ํจ์๋ฅผ ๊ฐ๊ณ ์์ง ์์const num = 100;์ ํ ๋นํ๋ฉดnum ๋ณ์์ 100๋ง ํ ๋น๋๋ฉฐ ์๋ฌด๊ฒ๋ ์ฒจ๋ถ๋์ง ์์100์ด primitive ๊ฐES5์ primitive ๊ฐ ํ์ string, number,
Generator functionfunction\* ํค์๋๋ฅผ ์ฌ์ฉํ ํจ์์ ๋๋ ์ดํฐ ํจ์ ํํfunction ์ ์ธ๋ฌธ, function ํํ์, GeneratorFunction์์ฑ ๋ฐฉ๋ฒfunction\* ๋ค์์ ์๊ดํธ() ์์ฑ. ์ด์ด์ ์์ฑํด๋ ๋๊ณ ํ๋ ์ด์ ๋์๋ ๋จf
์ ๊ท ํํ์ ์ฌ์ฉ ํํ๋งค์น ์์ ์์น๋ฅผ lastIndex ํ๋กํผํฐ์ ์ค์ ๋ํดํธ ๊ฐ: 0g ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉดlastIndex ํ๋กํผํฐ ์์น๋ถํฐ ๋งค์นconst value = "ABABA", obj = /B/gg ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด lastIndex ํ๋กํผํฐ ๊ฐ์ด ๋ฐ๋
ES5๊น์ง๋ ์ํ ๊ณ์ฐ ์ฒ๋ฆฌ์ ๋ถ์กฑํ์ผ๋ES6์์ ์ํ ๊ณ4์ฐ์ฉ ํจ์๊ฐ ๋ง์ด ์ถ๊ฐ๋จํนํ, ๋จธ์ ๋ฌ๋/๋ฅ๋ฌ๋์ ๋์ํ ์ ์๊ฒ ๋จ์ผ๋ฐ์ ์ผ๋ก ์ํ ๊ณ์ฐ์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๊ฐ์ ์ค์ฌ์ผ๋ก ๋ค๋ฃธMath.trunc()์์๋ฅผ ์ ์ธํ ์ ์ ๋ฐํMath.sign()๊ฐ์ ๋ถํธ์ ํด๋นํ๋
Object์ Object๋ฅผ ํ ๋นํ๋ฉด ํ๋กํผํฐ ๊ฐ์ด ์ฐ๋๋จ๋ฐฐ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ๋๋จ์ฐ๋ ๋ฐฉ์ง: ํ๋กํผํฐ ๋จ์๋ก ํ ๋นRecursive Function ํจ์ ์์์ ์์ ํจ์๋ฅผ ํธ์ถํ๋ ํํ์ฌ์ฉ ์ฌ๋ก {name: {name: {name: value}}}\[1, 2, 3, 4
ํค์๋obj.name() ํํ๋ก ํธ์ถํ ํจ์(๋ฉ์๋)์์ this๋ก ์ธ์คํด์ค(์ค๋ธ์ ํธ)๋ฅผ ์ฐธ์กฐ์คํ ์ฝํ ์คํธ์ this ๋ฐ์ธ๋ฉ ์ปดํฌ๋ํธ์ ๋ฐ์ธ๋ฉ๊ธ๋ก๋ฒ ์ค๋ธ์ ํธ์์ this๋ ๊ธ๋ก๋ฒ ์ค๋ธ์ ํธ ์ฐธ์กฐthis์ window ์ค๋ธ์ ํธwindow๋ JS์์ ๋ง๋ ๊ฒ์ด ์๋๋ฉฐ ๊ธ๋ก๋ฒ
function ์ธ์คํด์ค ๊ธฐ์ค function ๊ตฌ๋ถ ๋นํธ์ธ Function ์ค๋ธ์ ํธ function ์ค๋ธ์ ํธ: function ํค์๋๋ก ์์ฑ function ์ธ์คํด์ค: new ์ฐ์ฐ์๋ก ์์ฑ function ์ค๋ธ์ ํธ๋ ์ธ์คํด์ค ๋นํธ์ธ
์คํ ์ฝํ ์คํธ Exeuction Context ํจ์๊ฐ ์คํ๋๋ ์์ญ, ๋ฌถ์ ํจ์ ์ฝ๋๋ฅผ ์คํํ๊ณ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ ์คํ์์ ์ฌ์ music("์์ ")์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ฉด ์์ง์ ์คํ ์ฝํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์คํ ์ฝํ ์คํธ ์์ผ๋ก
์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์ค๋ธ์ ํธ๋ฅผ Array ์ค๋ธ์ ํธ๋ก ๋ณํ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ํจ์ ์์ฑopt์ดํฐ๋ฌ๋ธ ์ค๋ธ์ ํธ๋ฅผ ์ ๊ฐํ ๋๋ง๋ค ํธ์ถ์ธ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์ค๋ธ์ ํธ ์์ฑoptํธ์ถ๋ ํจ์์์ this๋ก ์ฐธ์กฐํ๋ผ๋ฏธํฐ ๊ฐ์ Array๋ก ๋ณํ, ๋ฐํํ๋ผ๋ฏธํฐ์ ๋ณํ ๋์ ๊ฐ์ ์์ฑ์ฝค๋ง๋ก
Template Literal๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฆฌํฐ๋ดํํ์์ ํฌํจํ ์ ์์๊ฐ์ข์์๋ ํ ํ๋ฆฟ์ผ๋ก ํ๊ธฐbacktick ์์ ํํ์ ์์ฑํํ์์ ${ํํ์} ํํ๋ก ์์ฑtagged Templateํธ์ถ๋๋ ํจ์๋ฅผ ํ๊ทธ ํจ์(tag function)๋ผ๊ณ ๋ถ๋ฆshow() ํจ์
๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ ๊ฐ๊ณผ ๊ฐ ํ์ ์ ๋น๊ต๊ฐ์ผ๋ฉด true, ์๋๋ฉด false ๋ฐํ์ค๋ธ์ ํธ ๋น๊ต ๋ชฉ์ ์ด ์๋\[]์ \[] ๋น๊ต, {}์ {} ๋น๊ต๋ falseJS ๊ฐ ๋น๊ต ๋ฐฉ๋ฒ๊ฐ๊ณผ ํ์ ๊น์ง ๋ชจ๋ ๋น๊ต: ===ํ์ ์ ๋น๊ตํ์ง ์๊ณ ๊ฐ๋ง ๋น๊ต: ==Object.is()์ ==
๋นํธ์ธ ์ค๋ธ์ ํธtrue์ false ์ฒ๋ฆฌ๊ฐ์ด ์์ผ๋ฉด true๋ก ์ธ์false ์ธ์ ๊ธฐ์คundefined, null, NaN๋น ๋ฌธ์์ด, ์ซ์ ํ์ ์ 0์ซ์ ๊ฐ ๋ณํ ๊ธฐ์คtrue๋ฅผ 1๋ก, false๋ฅผ 0์ผ๋ก ๋ณํBoolean ์ธ์คํด์ค ์์ฑํ๋ผ๋ฏธํฐ ๊ฐ์ true ๋๋ fal