๐ฉ ๊ฐ์ฒด
ํ๋์
๋ณ์
์ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํ ์๋ฃํ
๊ฐ์ฒด ๋ดํ๋กํผํฐ(property, ์์ฑ)
์๋ฉ์๋(method)
๊ฐ ๋ด๊ธธ ์ ์๋ค// ์ค๊ดํธ ์์ ํค:๊ฐ ์ ๋ ฅ var book = { title: "์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ณต", //book๊ฐ์ฒด์ ์ ๋ชฉ ์ ๋ณด author: "์๋ฌด๊ฐ", //book๊ฐ์ฒด์ ์ ์ ์ ๋ณด pages: 347, //book๊ฐ์ฒด์ ํ์ด์ง์ price: 18800, //book๊ฐ์ฒด์ ๊ฐ๊ฒฉ } // ์ค๊ดํธ ๋ฐ์ ํค:๊ฐ ์ ๋ ฅ var book = {} book.title: "์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ณต", // ์์ฑ, book๊ฐ์ฒด์ ์ ๋ชฉ ์ ๋ณด book.author: "์๋ฌด๊ฐ", // ์์ฑ, book๊ฐ์ฒด์ ์ ์ ์ ๋ณด book.pages: 347, // ์์ฑ, book๊ฐ์ฒด์ ํ์ด์ง์ book.price: 18800, // ์์ฑ, book๊ฐ์ฒด์ ๊ฐ๊ฒฉ
- ์น๋ธ๋ผ์ฐ์ ์ ๊ตฌ์ฑ์์๋ค์ ํ๋ํ๋๊ฐ
๊ฐ์ฒดํ
๋์ด ์๋ค. js๋ก ์ด ๊ฐ์ฒด๋ฅผ ์ ์ดํด์ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ดํ ์ ์๋ค. ์ด ๊ฐ์ฒด๋ค์ ์๋ก ๊ณ์ธต์ ์ธ ๊ด๊ณ๋ก ๊ตฌ์กฐํ๋์ด ์๋ค.
๐ฉ ๊ฐ์ฒด์ ์ข ๋ฅ
๐ธ ๋ด์ฅ๊ฐ์ฒด
๋ ์ง, ์๊ฐ, ์ํ ํจ์ ์ฒ๋ผ ์์ฃผ ์ฌ์ฉํ๋ ์์๋ค์ js์์ ์ด๋ฏธ ๊ฐ์ฒด๋ก ์ ์๋์ด ์์
ex)Date
,Numberm Array
,Math
๐ธ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ์น ๋ฌธ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์
ex)Document๊ฐ์ฒด
,Image๊ฐ์ฒด
๋ฑ๐ธ ๋ธ๋ผ์ฐ์ ๊ฐ์ฒด ๋ชจ๋ธ(BOM)
์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ด๋ ์ฐฝ ํฌ๊ธฐ ๋ฑ ์น๋ธ๋ผ์ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ฒด๋ก ๋ค๋ฃจ๋ ์์ญ
ex)Navigator๊ฐ์ฒด
,History๊ฐ์ฒด
,Location๊ฐ์ฒด
๋ฑ๐ธ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด: ์์์ ๋ง๋ book๊ฐ์ฒด ์ฒ๋ผ ์ฌ์ฉ์๊ฐ ํ์ํ ๋๋ง๋ค ์ง์ ์ ์ํด์ ์ฌ์ฉํ๋ ๊ฐ์ฒด
โจ
BOM
๊ณผDOM
์ ์ด ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ๊ฐ์ฅ ํฐ ํ์ด๋ค.
โฉ
BOM(Browser Object Model)
์นํ์ด์ง์ ๋ด์ฉ์ ์ ์ธํ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ข ์์๋ค์ ๊ฐ์ฒดํ์ํจ ๊ฒ์ด๋ค. ์ ์ญ๊ฐ์ฒด Window์ ํ๋กํผํฐ์ ์ํ ๊ฐ์ฒด๋ค์ด ์ด์ ์ํ๋ค.<input type="button" onclick="alert(window.location)" value="alert(window.location)" /> <!--onclick์ ํ๋กํผํฐ๋ก ์ฌ์ฉ๋ alert(window.location) ๋ถ๋ถ์ด JS--> <input type="button" onclick="window.open('bom.html')" value="window.open('bom.html')" /> <!--onclick์ ํ๋กํผํฐ๋ก ์ฌ์ฉ๋ window.open('bom.html') ๋ถ๋ถ์ด JS-->
โฉ
DOM(Document Object Model)
์นํ์ด์ง์ ๋ด์ฉ์ ์ ์ดํ๋ค. window์ ์์ฑ(Property)์ธ document ์์ฑ(Property)์ ํ ๋น๋Document ๊ฐ์ฒด
๊ฐ ์ด๋ฌํ ์์ (๋ฌธ์ ๋ด์ ์ฃผ์ ์๋ฆฌ๋จผํธ์ ์ ๊ทผํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ณต)์ ๋ด๋นํ๋ค.<body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> </ul> <ol> <li>HTML</li> <li class="active">CSS</li> <li class="active">JavaScript</li> </ol> <img id="select" src="https://s3.ap-northeast-2.amazonaws.com/opentutorials-user-file/course/94.png" /> <img src="https://s3.ap-northeast-2.amazonaws.com/opentutorials-user-file/course/94.png" /> <script> /* body ๊ฐ์ฒด */ let body= document.body; let body= document.getElementsByTagName('body'); /* list ๊ฐ์ฒด (class, id) */ let lis= document.getElementsByClassName('active')); /* class ๊ฐ์ฒด๋ค */ let selected= document.getElementById('select')); /* id ๊ฐ์ฒด */ let lis= document.li; /* <li> ๊ฐ์ฒด๋ค์ ๋ชจ๋ ๋ฆฌ์คํธ */ for(let i=0; i<lis.length; i++) { lis[i].style.color='red'; } /* image ๊ฐ์ฒด */ let images= document.getElementsByTagName(image)[0]); /* ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ง(=0๋ฒ์งธ) */ let images= document.querySelectorAll(image); /* image ๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๋ชจ๋ ์์ ์ ํ */ let images= document.querySelector('image'); images.style.color='blue'; let images= document.querySelector('#select'); images.style.color='blue'; </script> </body>
๐ฉ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋
๊ฐ์ฒด ์์๋ ์์ฑ, ๋ฉ์๋(ํจ์)๊ฐ ๋ค์ด์์ ์ ์๋๋ฐ ์ฌ์ฉํ๊ธฐ ์ํด์๋
(๊ฐ์ฒด).(๋ฉ์๋๋ช )
์ ํํ๋ก ์ฌ์ฉํจ//Window ๊ฐ์ฒด์ alert ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ window.alert("Hi");
- ๊ฐ์ฒด์ ํ๋กํ ํ์ (prototype)๊ณผ ์ธ์คํด์ค
ํ๋กํ ํ์ (prototype)์ ๋๊ฐ์ ๋ชจ์์ ๊ฐ์ฒด๋ฅผ ์ฐ์ด ๋ง๋๋ ํ๊ณผ ๊ฐ๋ค. ํ๋กํ ํ์ ์ผ๋ก ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.(1) //๊ฐ์ฒด์ ํ๋กํ ํ์ ๋ง๋ค๊ธฐ function book(title, author, pages, price){ //book์ ์ํ this.title = title; this.author = author; this.pages = pages; this.price = price; } //ํ๋กํ ํ์ ์ผ๋ก book ๊ฐ์ฒด์ ์ธ์คํด์ค book1 ์์ฑํ๊ธฐ var book1 = new book("python", "earth", 227, 22000); //์์ฑ์ new๋ฅผ ์ฌ์ฉ
(2) //member1 ๊ฐ์ฒด ์์ฑ var member1 = { id:123, name: "ํ๊ธธ๋", age:25, address : "์์ธ" }; document.write("<h2>" + member1.name + "</h2>"); //name ์์ฑ์ ์ถ๋ ฅํ๊ธฐ ์ํด member1.name ์์ฑ document.write("<ul><li>id : " + member1.id + "</li>"); document.write("<li>๋์ด : " + member1.age + "</li>"); document.write("<li>์ฃผ์ : " + member1.address + "</li></ul>");
๐ DOM(๋)์ด๋ ์นํ์ด์ง์ HTML์ ๊ณ์ธตํ์์ผ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ๋ง๋ ๊ฐ์ฒด(Object) ๋ชจ๋ธ
โ HTML DOM์ ๋
ธ๋(node)๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ณ์ธต์ ๋จ์์ ์ ๋ณด๋ฅผ ์ ์ฅ
๐ JavaScript๋ ์ด model๋ก ์น ํ์ด์ง์ ์ ๊ทผํ๊ณ , ํ์ด์ง๋ฅผ ์์ ํ ์ ์๋ค
document๋ผ๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ํตํด ์ ๊ทผ
โก document ๊ฐ์ฒด๋ HTML ๋ฌธ์๋ฅผ ๋ํ๋ธ๋ค
๐ DOM์ HTML์ธ ์นํ์ด์ง์ ์คํฌ๋ฆฝํ
์ธ์ด(JavaScript)๋ฅผ ์๋ก ์๋ ์ญํ
โ ์ HTML์ ์ ๊ทผํด์ผ ํ ๊น?
๐ document๊ฐ์ฒด๋ DOMํธ๋ฆฌ์
root node(์ต์์ ๋ ๋ฒจ)
์ ์ ๊ทผํ๊ฒ ํด์ค๋ค.๐ document๊ฐ์ฒด๋ก ์์(element)์ ์ ๊ทผํ๋ฏ ์์์ ์์ฑ(attribute)์๋ ์ ๊ทผํ ์ ์๋ค.
(class, id
์ถ๊ฐํ์ฌ style๋ ์์ ๊ฐ๋ฅ)let blueElement = document.querySelector('.first_title'); blueElement.style.backgroundColor = 'blue'; // html ๋ด class์ด๋ฆ์ด first_title์ธ ์์์ ์ ๊ทผํ์ฌ blueElement ๋ณ์์ ๋ด๋๋ค. // blueElement๋ณ์์ ๋ฐฐ๊ฒฝ์ style์์ฑ์ 'blue'๋ก ์ ์ฉํ๋ค.
๐ซ JavaScript์์ style ์์ ํ ๋ hypen(-)์ ์ฌ์ฉํ ์ ์๋ค. (background-color๊ฐ ์๋
backgroundColor
๋ก ์จ์ผํ๋ค, camelCase)๐ ๋ชจ๋ ์์์ ๋ด์ฉ(content)์
innerHTML
์ผ๋ก ์ ๊ทผํ๊ณ ์์ ํ ์ ์๋ค.document.body.innerHTML = "๋ด์ฉ ๋ณ๊ฒฝ" // bodyํ๊ทธ ๋ด๋ถ์ ์๋ ๋ชจ๋ ๋ด์ฉ์ ์ ๋ถ "๋ด์ฉ ๋ณ๊ฒฝ" text๋ก ๋ฐ๊พผ๋ค.
๐ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ์์
์์(element) ์์ฑ
ํ๊ธฐ
.createElement(tagName)
โก "ํ๊ทธ๋ช " ์ฐ๊ธฐ (๋ฐ์ดํ๋ก ๊ฐ์ธ์ฃผ๊ธฐ)
.createTextNode()
โก "์ํ๋ ํ ์คํธ ์ฐ๊ธฐ" (๋ฐ์ดํ๋ก ๊ฐ์ธ์ฃผ๊ธฐ)
.appendChild()
โก ์์น ์ค์ ( (๋ถ๋ชจํ๊ทธ).appendChild( (์์ฑํ ์์ํ๊ทธ) )let content = document.createElement( 'p' ); // pํ๊ทธ ์์ฑ let text = document.createTextNode( 'Click' ); // pํ๊ทธ ์์ ๋ฃ์ ๋ด์ฉ ์์ฑ content.appendChild( text ); // ๋ด์ฉ์ pํ๊ทธ์ ์์น์ํด document.body.appendChild( content ); // pํ๊ทธ๋ฅผ body๋ด๋ถ์ ์์น์ํด // ํจ์ ํํ ๋ฐฉ์ function addElement() { // 3๊ฐ์ ์์ ์์ฑ(createElement) let listWrap = document.createElement('ul'); let list = document.createElement('li'); let listContent = document.createElement('span'); // ๊ฐ ์์๋ค์ ์์น ์ง์ listContent.innerHTML = "๋ฆฌ์คํธ ์์ฑ"; // ํ ์คํธ innerHTML์ ๋ฃ๊ธฐ (๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ ์คํธ๋ฅผ ๋ด์ ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ํด๋น ํ ์คํธ๋ฅผ ์์น์ํค๊ณ ์ถ์ ํ๊ทธ์ appendChild ํด์ค๋ค) list.appendChild(listContent); // span์ li์์ ์์น listWrap.appendChild(list); // li๋ฅผ ul์์ ์์น document.body.appendChild(listWrap); // ul์ body๋ด์ ์์น } addElement(); //ํจ์ ํธ์ถ
๐ซ
.createElement(tagName)
ํจ์๋ ์์๋ฅผ ์์ฑ๋ง ํ ๋ฟ,.createTextNode()
ํจ์๋ฅผ ํตํด ๋ด์ฉ์ ์์ฑํ๊ณ ,.appendChild()
๋ฅผ ํตํด html์ ์ด๋์ ์์นํด์ผ ํ ์ง ์ง์ (ํน์ element์ append) ์์ผ์ค์ผ ํ๋ค
์ ๋๊ฒฝ๋ก
<script src="/path/to/script.js"></script>
โ ์ฌ๊ธฐ์ /path/to/script.js๋ ์ฌ์ดํธ์ ๋ฃจํธ์์๋ถํฐ ํ์ผ์ด ์์นํ ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ธ๋ค.
์๋๊ฒฝ๋ก
<script src="script.js"></script>
โ ๊ฐ์ ํด๋ ๋ด์ ์๋ ํ์ผ์ธ "script.js"๋ฅผ src="script.js"๋ก ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ.
๋ณต์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ค๋ฉด
<script src="/js/script1.js"></script> <script src="/js/script2.js"></script>
script ํ์ผ
์ head ํ๊ทธ ๋ณด๋ค < body >ํ์ด์ง์ ํ๋จ์ ์์น
์ํค๋ ๊ฒ์ด ๋ ์ข์ ๋ฐฉ๋ฒ ๐ ๋ธ๋ผ์ฐ์ ์ ๋์๊ณผ script ์์น์ 2๊ฐ์ง ์ด์
HTML์์ script ํ๊ทธ๊ฐ body ํ๊ทธ ์์ ์ตํ๋จ์ ์์นํด์ผ ํ๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ์ ๋์ ๋ฐฉ์๊ณผ ์ฐ๊ด์ด ์๋ค.
(1)
HTML์ ์ฝ๊ธฐ ์์
HTML์ ์ฝ์ด ๋ด๋ ค๊ฐ๋ ๊ณผ์ ์์ script ์์๋ฅผ ๋ง๋๋ฉด ํ์ฑ์ ์ค๋จ, ์ค๋จ ๋ ์ํ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋(ํ์ผ)์ ๋ก๋ ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ HTML ํ์ฑ์ด ๊ณ์๋๋ค.
(์คํฌ๋ฆฝํธ ๋ก๋์ ์คํ์ ์ํด์ ์ค๋จ๋๋ ์์ ์ด ์๊ธฐ๊ณ , ๊ทธ์ ๋ฐ๋ผ ๊ทธ ๋งํผ Display์ ํ์๋๋ ๊ฒ์ด ์ง์ฐ๋๊ฒ ๋๋ค)(2)
HTML์ ํ์ฑ
โพ parsing: ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ ์ฝ๋๋ก ๋ฐ๊พธ๋ ์์ )(3)
DOM ํธ๋ฆฌ ์์ฑ
(4)
Render ํธ๋ฆฌ ์์ฑ
โพ DOM tree + CSS์ CSSOM ํธ๋ฆฌ ๊ฒฐํฉ(5)
Display(๋ธ๋ผ์ฐ์ )์ ํ์
๐น ๊ฒฐ๋ก ์ ์ผ๋ก HTML์ ์ฝ๋ ๊ณผ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋์ ํ์ฑ์ ์ํด์ ์ค๋จ๋๋ ์์ ์ด ์๊ธฐ๊ณ , ๊ทธ์ ๋ฐ๋ผ ๊ทธ ๋งํผ Display์ ํ์๋๋ ๊ฒ์ด ์ง์ฐ๋๋ค.
๋ ๋ค๋ฅธ ์ด์ ๋ก HTML ํ์ฑ์ด ๋๋๊ณ DOM ํธ๋ฆฌ๊ฐ ์๊ธฐ๊ธฐ ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด DOM ์กฐ์์ ํ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋ ์์ ๋ฅผ ๋ณด์.const appEl = document.querySelector(.app);
์ฐ๋ฆฌ๋ ์์ ๊ฐ์ด DOM์ ๊ดํ ์กฐ์์ ๋ฌด์ํ ํ ๊ฒ์ธ๋ฐ DOM ํธ๋ฆฌ๊ฐ ๋ ๋๋ง ๋๊ธฐ ์ ์ด๋ผ๋ฉด appEl์ undefined์ด๋ค. ์ด๋ฌํ ์ค๋ฅ์ ์ด ๋ฐ์ํ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฑฐ๋, ๋๋ฒ๊น ์ ๋ชปํ๋ค๋ฉด ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ธ ๊ฒ์ด๋ค.
๋ฐ๋ผ์script ํ๊ทธ๊ฐ body ํ๊ทธ ์ตํ๋จ์ ์์น
ํด์ผ ํ๋ค.
๐ script ํ๊ทธ์ async / defer ์์ฑ
๊ธฐ๋ณธ์ ์ผ๋ก script ํ๊ทธ๋ ์์์ ์์ฑํ ๋ธ๋ผ์ฐ์ ์ ๋์ ๋ฐฉ์๋๋ก ๋ถ๋ฌ์ค์ง๋ง async / defer ์์ฑ์ ์ฌ์ฉํจ์ผ๋ก ๋ค๋ฅด๊ฒ script ํ๊ทธ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ๋๋ค.
<script async src="index.js"></script> <script defer src="index.js"></script>
async ๋๋ defer ์์ฑ์ ์ฌ์ฉํ๋ฉด ๊ณตํต์ ์ผ๋ก HTML ํ์ฑ๊ณผ ๋์์ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ด๋ฃจ์ด์ง๋ค.
๐
async
๐ HTML ํ์ฑ์ด ๋๋์ง ์๋๋ผ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์๋ฃ๋๋ ์ฆ์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค. ๋น๋๊ธฐ์ ์ผ๋ก ์ฌ๋ฌ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋, ์คํํ๊ธฐ ๋๋ฌธ์ ์คํฌ๋ฆฝํธ์ ์์์ ์๊ด์์ด ์คํ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์คํ ์์๊ฐ ์๋ก ์ํฅ์ด ์๋ ์คํฌ๋ฆฝํธ๋ค์ ์ฌ์ฉํ ๋์๋ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
๐ async๋ HTML ํ์ฑ๊ณผ ๋์์ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ํ์ง๋ง ์คํฌ๋ฆฝํธ ์คํ์ HTML ํ์ฑ์ด ์ค์ง๋ ์ํ์์ ๋๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ HTML ํ์ฑ์ด ๋ฉ์ถ๋ ์์ ์ด ์๊ธธ ์ ์๋ค. ๋ค๋ง ์คํ ์์๋ฅผ ๊ฐ์ํด์ผ ํ๋ค.
๐defer
๐ HTML ํ์ฑ๊ณผ ๋์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๊ณ HTML ํ์ฑ์ด ์๋ฃ ๋ ํ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค.
async ๋๋ defer ์ค ์ด๋๊ฒ์ ์ฌ์ฉํ๋๋ผ๋ HTML ํ์ฑ๊ณผ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๋์์ ์งํ๋๋ฏ๋ก HTML ํ์ฑ์ด ์๋ฃ๋๋ ์๊ฐ์ ์ค์ผ ์ ์๋ค
strict ๋ชจ๋ ์ ์ธ
์คํฌ๋ฆฝํธ์ ์์ ํน์ ํจ์์ ์์ ๋ถ๋ถ์"use strict"(๋๋ 'use strict')
๋ฅผ ์ ์ธํ๋ฉด strict ๋ชจ๋๋ก ์ฝ๋๋ฅผ ์์ฑ ํ ์ ์๋ค.---์คํฌ๋ฆฝํธ์์ strict์ ์ธ--- "use strict"; var v = "Hi! I'm a strict mode script!";
---ํจ์์์ strict์ ์ธ--- function strict(){ // Function-level strict mode syntax 'use strict'; function nested() { return "And so am I!"; } return "Hi! I'm a strict mode function! " + nested(); } function notStrict() { return "I'm not strict."; }
use strict์ ์ฅ์
๐ ํํ ๋ฐ์ํ๋ ์ฝ๋ฉ ์ค์๋ฅผ ์ก์๋ด์ ์์ธ๋ฅผ ๋ฐ์ ์ํจ๋ค.
๐ ์๋์ ์ผ๋ก ์์ ํ์ง ์์ ์ก์ ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
๐ ์ ํํ๊ฒ ๊ณ ๋ ค๋์ง ์์ ๊ธฐ๋ฅ๋ค์ ๋นํ์ฑํ ์ํจ๋ค.
Strict Mode์ ์ฃผ์ํ ์
๐ "use strict"๋ ์คํฌ๋ฆฝํธ ์ต์๋จ์ ์์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๊ฒฉ๋ชจ๋๊ฐ ํ์ฑํ๋์ง ์์ ์๋ ์๋ค.
๐ "use strict"์ ์์๋ ์ฃผ์๋ง ์ฌ์ฉํ ์ ์๋ค.
๐ use strict๋ฅผ ์ทจ์ํ ๋ฐฉ๋ฒ์ ์๋ค. ์ผ๋จ ์๊ฒฉ ๋ชจ๋๊ฐ ์ ์ฉ๋๋ฉด ๋์ดํฌ ๋ฐฉ๋ฒ์ ์๋ค. (์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด์ ๋ฐฉ์์ผ๋ก ๋๋๋ฆฌ๋ "no use strict"๊ฐ์ ์ง์์๋ ์กด์ฌํ์ง ์๋๋ค.)
Prototype
์ด ์กด์ฌํ๋ค.Prototype
์ ๋ถ๋ชจ(๋๋ ์ํ)์ prototype ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๋ฉฐ, ์ด๊ฒ์ด ๋ฐ๋ณต(์ฒด์ธ) ๋๋ค๊ฐ, prototype ์ผ๋ก null ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์์ ๋์ด ๋๋ค.Javascript์ ๋ชจ๋ ๊ฐ์ฒด๋ ์์ ์ prototype(์ํ) ์ผ๋ก ๋ถํฐ constructor ํ๋กํผํฐ(์์ฑ์ ์์ฑ)๋ฅผ ์์ํ๋ค.
๊ฐ์ฒด ์ธ์คํด์ค(new์์ฑ์)๊ฐ ์์ฑ๋๋ ์๊ฐ prototype ์ constructor ์์ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
๋ํ ๋ชจ๋ JavaScript ํจ์๋ Function prototype ๊ฐ์ฒด์ constructor(์์ฑ์)๋ฅผ ํธ์ถํ์ฌ ์์ฑํ๋ค.(prototype ๊ฐ์ฒด๋ constructor ํธ์ถ๊ณผ ํจ๊ป ์์ฑ)
console.log( (function(){}).constructor === Function ); // true
function Fn() {}
console.log( Fn.constructor === Function ); // true
console.log( Fn.__proto__.__proto__.constructor === Object ); // true
//์ธ์คํด์ค(new์์ฑ์)
var newFn = new Fn()
console.log( newFn.constructor === Function); // false
console.log( newFn.constructor === Fn); // true
console.log( newFn.__proto__ === Fn.prototype ); // true
- ์์
//Circle ๊ฐ์ฒด ์์ฑ function Circle(radius) { this.radius = radius, this.circumference = function() { //์์ ๋๋ ๋ฅผ ๊ตฌํ๋ ํจ์ return Math.floor(this.radius * 2 * Math.PI); } this.area = function() { //์์ ๋์ด๋ฅผ ๊ตฌํ๋ ํจ์ return Math.floor(Math.pow(this.radius, 2) * Math.PI); } } let r = prompt('์์ ๋ฐ์ง๋ฆ์? (cm)'); //prompt๋ก ์์ ๋ฐ์ง๋ฆ ๊ฐ์ ์ ๋ ฅ ๋ฐ์ let circle1 = new Circle(r); //๊ฐ์ฒด ์์ฑ document.write(`๋ฐ์ง๋ฆ์ด ${r}cm์ผ ๋ <br>์์ ๋๋ : ์ฝ ${circle1.circumference()}cm <br>์์ ๋์ด : ์ฝ ${circle1.area()}cm<sup>2`); // ES6 ๋ฒ์ ์ผ๋ก ์ถ๋ ฅ(๋ฐฑํฑ(``)์ผ๋ก ๊ฐ์ธ๊ณ ${}๋ก ๋ถ๋ฌ์ค๊ธฐ) function Circle(radius){ this.radius = radius; this.circumference = function(){ return Math.floor(2 * Math.PI * radius); } this.area = function(){ return Math.floor(Math.PI * Math.pow(radius, 2)); } }
new
๋ฅผ ๋ถ์ด๋ฉด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ ํ์ ์ด๋ฅผ returnํ๋ค. /* ์์(1) */ function Person(name) { this.name = name; this.introduce = function() { return 'My name is' + this.name; } } //Person์ด๋ผ๋ ์ด๋ฆ์ ํจ์ ์์ฑ, ํ๋กํผํฐ(name)์ ๋ฉ์๋(function())์ ์ let p1 = new Person('kirin'); documnet.write(p1.introduce() + "<br/>"); //new Person('kirin') ์ด๋ผ๋ ์์ฑ์๋ฅผ ๋ง๋ ๋ค. ์ํ ํจ์์ ๋ด์ฉ์ ๊ทธ๋๋ก copyํ ๊ฒ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ง ๋ฃ์ผ๋ฉด ์ํ์ ์์ฑ๊ณผ ๋ฉ์๋์ ๊ณต์์ ๋ถ๋ฌ์ฌ ์ ์๋ค. let p1 = new Person('robot'); documnet.write(p1.introduce() + "<br/>"); //new Person('robot') ์ด๋ผ๋ ์์ฑ์๋ฅผ ๋ง๋ ๋ค. //์ด๋ ๊ฒ ๊ฐ์ฒด๊ฐ ์์ฑ(์์ฑ์) ๋ ๋๋ง๋ค ์ง์ ์ฝ๋๋ฅผ ์๋ก ์์ฑํ์ง ์๊ณ ์ฒ์ ์์ฑํ ํจ์(=function Person(name))๋ฅผ ์ด๊ธฐํํ์ฌ ๊ฐ๊ฒฐํ ๋ช ๋ น์ผ๋ก ์์ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค. //๊ฐ์ฒด์ ๋ํ ์ ์๋ฅผ ํ ๋ฒ๋ง ํด์ฃผ๋ฉด, ๊ทธ ์ดํ ์์ฑ์ ์์ฑ์ ํตํด ๊ณ์ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค. ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ๋์์ง /* ์์(2) */ function Person(name, job, hobby) { this.name = name; //Personํจ์์ ํ๋กํผํฐ this.job = job; //Personํจ์์ ํ๋กํผํฐ this.say = function() { //Personํจ์์ ๋ฉ์๋ document.write(this.name + "is a" + this.job); } this.hobby = hobby; //Personํจ์์ ํ๋กํผํฐ } //this๋ ์์ฑ์ ์์ ์ ๊ฐ๋ฆฌํด //์ด๋ ๊ฒ this์ ์ ์ฅ๋ ๊ฒ๋ค์ new๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๊ทธ ๊ฐ์ฒด์ ์ ์ฉ๋๋ค //new์์ฑ์๋ก ๋ถ๋ฌ์ค๊ธฐ let kirin = new Person('kirin', 'developer', 'hiking';); let robot = new Person('robot', 'swimmer', 'swimming';); kirin.say(); // kirin is a developer robot.say(); // kirin is a swimmer
๐ ๋ณ์
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฐ์ด๋
์ด๋ฆ์ด ๋ถ์ ์ ์ฅ์
์ ๊ฐ๋ค.- ์ง์ญ๋ณ์(local functnion ํจ์ ๋ด์์๋ง ๋ณ์์ ์กด์ฌO โก ํจ์๋จ์๋ก ์ ํจ๋ฒ์ ์ ํด์ง)
- ์ ์ญ๋ณ์(global function ํจ์ ๋ฐ์์ ๋ณ์์ ์กด์ฌO โก ๋ชจ๋ ํจ์ ๋ด์์ ํธ์ถ ๊ฐ๋ฅ)
let globalValue = 20; // ์ ์ญ๋ณ์ function testFunc() { let localValue = 10; // ์ง์ญ๋ณ์ document.write('globalValue = '+ globalValue + '<br>'); //20 document.write('localValue = '+ localValue + '<br>'); //10 } testFunc(); document.write('globalValue = '+ globalValue + '<br>'); //20 document.write('localValue = '+ localValue + '<br>'); // error
โก ํจ์ ๋ฐ์ ์ ์ญ ๋ณ์ globalValue๋ ์ฝ๋ ์ ์ฒด์์ ๊ฐ์ด ์ ํจํ์ง๋ง, ํจ์ ๋ด์ ์ง์ญ ๋ณ์์ธ localValue๋ ํจ์ ๋ฐ์์ ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ์ถ๋ ฅ๋๋ค.(ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์ง์ญ๋ณ์๊ฐ ์๋ฉธํ๊ธฐ ๋๋ฌธ)
๐ ๋ณ์ ์ ์ธ ๋ฐฉ์
var
์ ์ฐํ ๋ณ์ ์ ์ธ, ๊ฐ์ด ๋ฐ๋ ์ฐ๋ ค๊ฐ ์๋คvar name = 'apple' console.log(name) // apple var name = 'tomato' console.log(name) // tomato
let
๋ณ์ ์ฌ์ ์ธ์ด ๋์ง ์๋๋ค, ๋ณ์์ ๊ฐ ์ฌํ ๋น์ด ๊ฐ๋ฅํ๋คlet name = 'apple' console.log(name) // apple let name = 'tomato' console.log(name) // Uncaught SyntaxError: Identifier 'name' has already been declared name = 'melon' console.log(name) //melon
const
๋ณ์ ์ฌ์ ์ธ, ๋ณ์ ์ฌํ ๋น ๋ชจ๋ ๋ถ๊ฐ๋ฅconst name = 'apple' console.log(name) // apple const name = 'tomato' console.log(name) // Uncaught SyntaxError: Identifier 'name' has already been declared name = 'melon' console.log(name) //Uncaught TypeError: Assignment to constant variable.
๐ ๋ณ์ ๋ช ๋ช ๊ท์น
(1) ๋ณ์๋ช ์๋ ์ค์ง๋ฌธ์
์์ซ์
, ๊ทธ๋ฆฌ๊ณ ๊ธฐํธ$
์_
๋ง ๋ค์ด๊ฐ ์ ์๋ค.let userName; // ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๋ณ์๋ช let test123; // ๋ฌธ์์ ์ซ์๋ก ๊ตฌ์ฑ๋ ๋ณ์๋ช // ๋ณ์๋ฅผ ์ ์ธ๋ง ํ๊ณ ๊ฐ์ ๋ฃ์ด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์, ๋ณ์๋ฅผ ํธ์ถํ๋ฉด undefined๊ฐ ์ถ๋ ฅ let $ = 1; // '$'๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ ์ธ let _ = 2; // '_'๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ ์ธ alert($ + _); // 3
(2) ์ฒซ ๊ธ์๋ ์ซ์๊ฐ ๋ ์ ์๋ค.
let 1a; // ๋ณ์๋ช ์ ์ซ์๋ก ์์ํด์ ์๋๋ค. let my-name; // ํ์ดํ '-'์ ๋ณ์๋ช ์ ์ฌ ์ ์๋ค.
(3) ๋ยท์๋ฌธ์ ๊ตฌ๋ณํ๋ค(camelํ๊ธฐ๋ฒ)
let apple; // 'apple' ์ด๋ผ๋ ๋ณ์๋ช (์๋์ ๋ค๋ฅด๋ค) let AppLE; // 'AppLE' ์ด๋ผ๋ ๋ณ์๋ช (์์ ๋ค๋ฅด๋ค)
(4) ์์ฝ์ด๋ ๋ณ์๋ช ์ด ๋ ์ ์๋ค
๐ ์์ฝ์ด ์์: let, class, return, function...
๐ป ์์
- ๋ณํํ์ง ์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋, let ๋์
const
๋ฅผ ์ฌ์ฉ- ์์๋ ์ฌํ ๋นํ ์ ์์ผ๋ฏ๋ก ์์๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์
const myBirthday = '18.04.1982'; myBirthday = '01.01.2001'; // error, can't reassign the constant!
๐ป ๋๋ฌธ์ ์์
๊ธฐ์ตํ๊ธฐ ํ๋ ๊ฐ์ ๋ณ์(์์)์ ํ ๋นํด ๋ณ์นญ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋๋ฌธ์์ ๋ฐ์ค๋ก ๊ตฌ์ฑ๋ ์ด๋ฆ์ผ๋ก ๋ช ๋ช ํ๋ค.
(=๋๋ฌธ์ ์์๋ โํ๋ ์ฝ๋ฉํโ ๊ฐ์ ๋ณ์นญ์ ๋ง๋ค ๋ ์ฌ์ฉ)const COLOR_RED = "#F00"; const COLOR_GREEN = "#0F0"; const COLOR_BLUE = "#00F"; const COLOR_ORANGE = "#FF7F00"; // ์์์ ๊ณ ๋ฅด๊ณ ์ถ์ ๋ ๋ณ์นญ์ ์ฌ์ฉํ ์ ์๋ค. let color = COLOR_ORANGE; alert(color); // #FF7F00 const pageLoadTime = /* ์นํ์ด์ง๋ฅผ ๋ก๋ํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ */; //pageLoadTime์ ๊ฐ์ ํ์ด์ง๊ฐ ๋ก๋๋๊ธฐ ์ ์๋ ์ ํด์ง์ง ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ณ์๋ช ์ ์ง์์ง๋ง, //์ด ๊ฐ์ ์ต์ด ํ ๋น ์ดํ์ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ์ฌ์ ํ ์์์ด๋ค
JASON(Javascript Object Notation)ํ๊ธฐ๋ฒ์ ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ํ ์ฝ๊ณ ์ฐ๊ธฐ ์ฌ์ด ํ๊ธฐ๋ฒ.
(1) ์ด๋ฆ / ๊ฐ ์
(2) ๋ฐฐ์ด
(1) '์ด๋ฆ / ๊ฐ ์'์ ํ๊ธฐ๋ฒ
{์ด๋ฆ1: ๊ฐ1, ์ด๋ฆ2: ๊ฐ2, ์ด๋ฆ3: ๊ฐ3}
ex)
let countries = {ko: 'ํ๊ตญ', fr: 'ํ๋์ค', uk: '์๊ตญ'} let koName = countries.ko; // ๊ฐ์ฒด.ํค ์ผ๋ก ๊ฐ์ ์ ๊ทผ let frName = countries['fr']; // ๊ฐ์ฒด['ํค'] ์ผ๋ก ๊ฐ์ ์ ๊ทผ
=> '๊ฐ์ฒด.์ด๋ฆ' ๋๋ '๊ฐ์ฒด[์ด๋ฆ]' ๋ ๊ฐ์ง ๋ฐฉ์ ์คํ๋๋ฅผ ์ฌ์ฉํด์ ์ ๊ทผ ๊ฐ๋ฅ
(2) '๋ฐฐ์ด' ํ๊ธฐ๋ฒ
[๊ฐ0, ๊ฐ1, ๊ฐ2, ๊ฐ3]
ex)
let countryCodes = ['ko', 'fr', 'uk', 'us']; let idx0 = countryCodes[0]; // 'ko' let idx2 = countryCodes[2]; // 'uk'
=> '๊ฐ์ฒด[์ธ๋ฑ์ค]' ํ์์ผ๋ก ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ธ๋ฑ์ค ๊ฐ์ 0๋ถํฐ ์์ํ๋ค.
(3) '์ด๋ฆ/๊ฐ' ํํ์ '๋ฐฐ์ด' ํํ์ ํผํฉ ์ฌ์ฉ
let member = { name: 'kirin', favorateColors: ['white', 'blue'] }; let message = member.name + "๋์ด ์ข์ํ๋ ์์์" + member.favorateColors[0] + "์ ๋๋ค."; console.log(message) //kirin๋์ด ์ข์ํ๋ ์์์ white์ ๋๋ค.
์ธ์ ์ด๋ ๊ฒ ์ ๋ฆฌ๋ฅผ+_+ async / defer ์๊ณ ๊ฐ๋๋ค ใ ใ