๐ ์? (์ฌ์ฉ ์ด์ )
โผ JavaScript๋ฅผ ์ฐ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ HTML ์กฐ์์ด ๋ชฉ์ ์ด๋ค.
โผ ๊ทธ ์ธ๋ก, ์๋ฒ์ ํต์ ๊ฐ๋ฅ, ํด๋ฆญ ๋ฐ ํ์ดํ ๊ฐ์ง, ๋น๋๊ธฐ ์ฒ๋ฆฌ, ์๋ฃ ๋ค๋ฃจ๊ธฐ ๋ฑ์ ๋ชฉ์ ์ผ๋ก๋ ์ฌ์ฉ๋๋ค.
๐ JavaScript
โผ JavaScript๋ Call Stack์ด ํ๋๋ก, single thread๋ก ๋์ํ๋ค.
โผ event loop๋ฅผ ์ด์ฉํด์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋์์ฑ์ ์ง์ํ๋๋ฐ, ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ง์ํ๋ ๊ฒ์ด ์๋, ๋ธ๋ผ์ฐ์ ๋ node.js์์ ์ง์๋๋ค.
โ JavaScript ๊ตฌ์กฐ
โผ Heap & Call Stack: V8๊ณผ ๊ฐ์ JavaScript ์์ง์ ๊ตฌ์ฑ์์์ด๋ค.
โ Heap: JavaScript์ ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ, ๊ตฌ์กฐํ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ์์ธ๋ค.
โ Call Stack: ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ํธ์ถํ๋ ํจ์๋ค์ด ์์ธ๋ค.
โผ Web API: ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณต๋๋ API, ๋น๋๊ธฐ ์์ ์ ์คํํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ Task Queue๋ก ๋๊ฒจ์ค๋ค.
โผ Task Queue: Call Stack์ด ๋น์ด ์์ด์ผ ์คํ๋๋ฉฐ, ๊ทธ ์ ๊น์ง๋ Event Loop๋ฅผ ๋๋ค.
โ JavaScript ๋์ ๊ณผ์
setTimeout(() => console.log(20), 1000);
console.log(30);
โผ ์์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๋, ์คํ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
โผ setTimeout function์ด Call Stack์ ๋ค์ด๊ฐ๋ค๊ฐ, Web API๋ก ์ฎ๊ฒจ์ง๋ค.
โผ 1์ด ํ, Web API์์ ์ฝ๋ฐฑ๋์ด Task Queue์์ ๋ฐ๋๋ค.
โผ console.log(30);์ด Call Stack์ ๋ค์ด๊ฐ์ ์คํ๋๋ค.
โผ Call Stack์ด ๋น์ด Task Queue์ console.log(20)์ด ์คํ๋๋ค.
๐ JavaScript ๋ฌธ๋ฒ
โ ๋ณ์
โ var ํค์๋
var a = 10;
var a = 100;
function test() {
var b = 10;
}
console.log(a); // 100
console.log(b); // undefined
โผ var ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ค.
โผ var ํค์๋๋ ์ค๋ณต ์ฌ์ฉ์ ๊ฒ์ฌํ์ง ์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
โผ var ํค์๋์ ์ค์ฝํ๋ ํจ์์ ์ฝ๋ ๋ธ๋ก์ผ๋ก, ํจ์๊ฐ ์๋ ๋ค๋ฅธ ๊ณณ์์ ์ ์ธ ์ ์ ์ญ ๋ณ์๋ก ์ค์ ๋๋ค.
โ let ํค์๋
โผ let ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ค.
โผ let ํค์๋๋ ์ค๋ณต ์ฌ์ฉ์ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์, ๋์ผํ ๋ณ์๋ช ์ผ๋ก ์ฌ์ฉ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
โผ let ํค์๋์ ์ค์ฝํ๋ ๋ธ๋ก ๋ ๋ฒจ์ด๋ค.
โผ var ํค์๋๋ณด๋ค let ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ด ์ข๋ค.
โ const ํค์๋
โผ const ํค์๋๋ฅผ ์ฌ์ฉํด์ ์์๋ฅผ ์ ์ธํ ์ ์๋ค.
โผ ๋ณ์์ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ค.
โผ const ํค์๋์ ์ค์ฝํ๋ ๋ธ๋ก ๋ ๋ฒจ์ด๋ค.
โ ํธ์ด์คํ
console.log(foo); // undefined
var foo = 10;
console.log(foo); // 10
console.log(bar); // ReferenceError
let bar = 10;
โผ var ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ ๋ณ์๋ function์ ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ํด๋น ์ค์ฝํ ์ ๋๋ก ์ฎ๊ธด ๊ฒ ์ฒ๋ผ ๋์ํ๋ ํน์ฑ์ ๋งํ๋ค.
โผ var ํค์๋์ ์ ์ธ๊ณผ ์ด๊ธฐํ(undefined)๊ฐ console.log(foo) ์ด์ ์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์, ๋ณ์ ์ ์ธ ์ undefined๊ฐ ๋ฐ์ํ๊ณ , let ํค์๋๋ ํธ์ด์คํ ์ด ์ด๋ฃจ์ด์ง์ง ์์ RferenceError๊ฐ ๋ฐ์ํ๋ค.
โ function
function {์ด๋ฆ}() {
}
โผ ๊ธด ์ฝ๋๋ฅผ ์งง์ ๋จ์ด๋ก ์ถ์ฝํด์ ์ฌ์ฉํ ์ ์๋ค.
โผ {์ด๋ฆ}()์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
โผ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ด๋๋ค.
โผ function ์๋ช ์ ๊ตฌ์ฒด์ + ์์ด + ์์์ ์๋ฌธ์ + camelCase๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
โ if-else
โผ ์กฐ๊ฑด๋ฌธ
โ for
for (let i = 0; i < ํ์; i++) {
}
โผ ๋ฐ๋ณต๋ฌธ
โ ์ค์ํ ๋น๊ต ์ฐ์ฐ์
1 == '1' // true
1 === '1' // false
โผ == (๋์จํ ๋น๊ต, ๊ฐ๋ง ๊ฐ์ผ๋ฉด ๋๋ค.)
โผ === (์๊ฒฉํ ๋น๊ต, ํ์ ๊ณผ ๊ฐ์ด ๊ฐ์์ผ ํ๋ค.)
โ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์๋์ง ๊ฒ์ฌํ๊ธฐ
console.log("abc".includes("a")); // true
console.log("abc".includes("ab")); // true
โผ includes ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋ฌธ์, ๋ฌธ์์ด์ด ์กด์ฌํ๋์ง ํ์ธํ ์ ์๋ค.
โผ ํ๊ธ์ด ์กด์ฌํ๋์ง, ์์ด๊ฐ ์กด์ฌํ๋์ง ๋ฑ์ ์ธ๋ถ์ ์ธ ๊ฒ์ฌ์๋ ์ ํฉํ์ง ์๋ค.
โ ์ ๊ท์ ๊ฒ์ฌ
console.log(/a/.test("abcd")); // true
// ๋ฒ์ ์ง์
console.log(/[a-z]/.test("abcd")); // a๋ถํฐ z๊น์ง 1๊ฐ๊ฐ ํฌํจ๋์ด ๊ฒ์ฌ (true)
console.log(/[a-zA-Z]/.test("abcd")); // ์๋ฌด ์ํ๋ฒณ์ด๋ 1๊ฐ๊ฐ ํฌํจ๋์ด ๊ฒ์ฌ (true)
console.log(/[ใฑ-ใ
๊ฐ-ํฃ]/.test("abcd")); // ์๋ฌด ํ๊ธ์ด๋ 1๊ฐ๊ฐ ํฌํจ๋์ด ๊ฒ์ฌ (false)
// ํํ์
console.log(/\S/.test("abcd")); // ์๋ฌด ๋ฌธ์๋ 1๊ฐ๊ฐ ํฌํจ๋์ด ๊ฒ์ฌ (true)
console.log(/^a/.test("abcd")); // a๋ก ์์ํ๋์ง ๊ฒ์ฌ (true)
console.log(/a|b/.test("abcd")); // a ๋๋ b๊ฐ ์กด์ฌํ๋์ง ๊ฒ์ฌ (true)
// ์ด๋ฉ์ผ ๊ฒ์ฌ ์ ๊ท์
/[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+/.test("aasdasd@casehc.com") // true
โผ /{์ ๊ท์}/.test({๊ฒ์ฌํ ๋ฌธ์/๋ฌธ์์ด})์ ์ฌ์ฉํ์ฌ ๊ฒ์ฌํ ์ ์๋ค.
โผ ์ด๋ฉ์ผ ๊ฒ์ฌ ์ ๊ท์์์ \S๋ ํ ๊ธ์๋ง ๊ฒ์ฌํ๋ฏ๋ก +๋ฅผ ๋ถ์ฌ์ ๋ฐ๋ณต ๊ฒ์ฌ๋ฅผ ์งํํ๊ณ .์ ์ ๊ท์ ๋ฌธ๋ฒ์ด๊ธฐ ๋๋ฌธ์ \๋ฅผ ์์ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค.
โ ๋ฐ์ฌ๋ฆผ ํ๊ธฐ
console.log((5555 * 1.1).toFixed(2)); // 6110.50
โผ toFixed({๋ฐ์ฌ๋ฆผ์ด ์ ์ฉ๋์ด ๋จ์ ์์์ ์๋ฆฌ ์})๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ฌ๋ฆผ์ ํ ์ ์๋ค.
โ ์ฐ์ฐ์ ํน์ง
console.log('1' + 1) // '11'
โผ ์ซ์ 1๊ณผ ๋ฌธ์ 1์ ๋ํ๋ฉด "11" ๋ฌธ์์ด์ด ๋๋ค.
โ Array
let carName = "์๋ํ";
let price = 50000;
let carColor = "white";
// Array ์ฌ์ฉํ๊ธฐ
let car = ["์๋ํ", 50000, "white"];
โผ Array๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์๋ฃ๋ฅผ ๋ณ์ ํ๋์ ์ ์ฅ ๊ฐ๋ฅํ๋ค.
โผ ์๋ฃํ์ string, number ์๊ด ์์ด ํ ๋ฒ์ ๋ฃ์ ์ ์๋ค.
โผ car[0]์"์๋ํ", car[1]์ 50000, car[2]์ "white"๊ฐ ์ถ๋ ฅ๋๋ค.
โผ Array์ ์๋ฃ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ car[3] = {์ํ๋ ๊ฐ}
โผ Array์์ ์๋ฃ๋ฅผ ์์ ํ๋ ๋ฐฉ๋ฒ์ car[2] = "black"
โผ ์์๊ฐ ์กด์ฌํ์ฌ, car.sort()๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํ๊ณ car.slice({์์ Idx}, {์ข ๋ฃ Idx})๋ก ์ค๊ฐ์ ๋ฐฐ์ด์ ์๋ฅผ ์ ์๋ค.
โ Object
let carName = "์๋ํ";
let price = 50000;
let carColor = "white";
// Object ์ฌ์ฉํ๊ธฐ
let car = {
name: "์๋ํ",
price: 50000,
color: "white",
};
โผ Object์ ๊ฐ์ ๋ฃ๊ธฐ ์ํด์๋ {}์ ์ฌ์ฉํ๊ณ , {key}: {value}๋ก ๊ฐ์ ๊ธฐ์ ํ๋ค.
โผ car.name์ "์๋ํ", car.price๋ 50000, car.color๋ "white"๊ฐ ์ถ๋ ฅ๋๋ค.
โผ car์ ์๊น์ "black"์ผ๋ก ์์ ํ๊ธฐ ์ํด์๋ car.color = "black"์ผ๋ก ์์ ํ ์ ์๋ค.
โผ car.{key} = {value}๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก์ด ๊ฐ์ ์ ์ฅํ ์ ์๋ค.
โ ์ ๋ ฌํ๊ธฐ
let arr = [7, 4, 6, 30, 20];
arr.sort() // 20, 30, 4, 6, 7
โผ arr.sort()์ ๊ฒฐ๊ณผ๋ก 4, 6, 7, 20, 30์ ๊ธฐ๋ํ์ง๋ง, 20, 30, 4, 6, 7 ์์ผ๋ก ์ถ๋ ฅ๋๋๋ฐ, ์ด๋ sort() ์ฌ์ฉ ์ string ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
let arr = [7, 4, 6, 30, 20];
arr.sort((a, b) => {
return a - b;
}); // 4, 6, 7, 20, 30
โผ compareFunction์ ์ ์ํด์ ์ซ์ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋๋ก ํ๋ค.
// ๋ฌธ์์ด ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
// 1๋ฒ
let strs = ["b", "a", "c"];
strs.sort().reverse();
console.log(strs) // "c", "b", "a"
// 2๋ฒ
let strs = ["b", "a", "c"];
strs.sort((a, b) => {
if (a < b) {
return 1;
} else if (a > b) {
return -1;
} else {
return 0;
}
});
console.log(strs);
โผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์์ ๊ฐ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
๐ Web Browser API ์ฌ์ฉํ๊ธฐ
โ ์ํ๋ ํ๊ทธ ์ฐพ๊ธฐ
โผ document.getElementById("{Id ๊ฐ}"): Id ๊ฐ์ผ๋ก ํด๋นํ๋ ํ๊ทธ ์ฐพ๊ธฐ, Id ๊ฐ์ ๊ณ ์ ํ๋ฏ๋ก id ๊ฐ์ ํด๋นํ๋ ํ๊ทธ 1๊ฐ ๋ฐํ
โผ document.getElementsByClassName("{Class ๊ฐ}"): Class ๊ฐ์ผ๋ก ํด๋นํ๋ ํ๊ทธ ์ฐพ๊ธฐ, ๋์ผํ Class ๊ฐ์ด ์กด์ฌํ ์ ์์ด ๋ค์ [{์ธ๋ฑ์ค ๊ฐ}]์ ๋ถ์ฌ HTML ๋งจ ์์์๋ถํฐ ์ํ๋ ์์๋ฅผ ์ ํํ ์ ์๋ค.
โผ document.querySelector("#{Id ๊ฐ}"): Id ๊ฐ์ผ๋ก ํด๋นํ๋ ํ๊ทธ ์ฐพ๊ธฐ, HTML ๋งจ ์์์๋ถํฐ ์ฒซ ๋ฒ์งธ ํ๊ทธ๋ฅผ ์ฐพ๋๋ค.
โผ document.querySelector(".{Class ๊ฐ}"): Class ๊ฐ์ผ๋ก ํด๋นํ๋ ํ๊ทธ ์ฐพ๊ธฐ, HTML ๋งจ ์์์๋ถํฐ ์ฒซ ๋ฒ์งธ ํ๊ทธ๋ฅผ ์ฐพ๋๋ค.
โผ document.querySelectorAll(".{Class ๊ฐ}"): Class ๊ฐ์ผ๋ก ํด๋นํ๋ ํ๊ทธ ์ฐพ๊ธฐ, ๋ค์ [{์ธ๋ฑ์ค ๊ฐ}]์ ๋ถ์ฌ HTML ๋งจ ์์์๋ถํฐ ์ํ๋ ์์๋ฅผ ์ ํํ ์ ์๋ค.
โผ ๊ทธ๋ฅ ๊ฐ์ ํ๊ทธ, # -> id, . -> class๋ฅผ ์๋ฏธํ๋ค.
โ Timeout
setTimeout(() => {
document.getElementById("5-alert").style.display = "none";
}, 5000);
โผ setTimeout({handler}, {milliSec})์ ์ฌ์ฉํ์ฌ, milliSec ํ ์คํํ handler๋ฅผ ์ง์ ํ ์ ์๋ค.
โผ "5-alert"๋ผ๋ Id๋ฅผ ๊ฐ์ง ํ๊ทธ์ Css์ 5์ด ํ, display: none์ ์ถ๊ฐํ๋ ์ฝ๋์ด๋ค.
โ Interval
setInterval(() => {
console.log("์๋
");
}, 1000);
โผ setInterval({handler}, {milliSec})์ ์ฌ์ฉํ์ฌ, milliSec ๋ง๋ค ์คํํ handler๋ฅผ ์ง์ ํ ์ ์๋ค.
โผ 1์ด๋ง๋ค "์๋ "์ ์ถ๋ ฅํ๋ค.
โ alert
โผ alert({message})๋ฅผ ์ฌ์ฉํด์ ์๋ฆผ์ฐฝ์ ๋์ธ ์ ์๋ค.
๐ JavaScript๋ก UI ๋ง๋ค๊ธฐ
1. HTML/CSS๋ก ๋ฏธ๋ฆฌ ๋์์ธํ๋ค.
2. ํ์ํ ๋ ๋ณด์ฌ์ฃผ๋ JavaScript ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๐ HTML ์์์ JavaScript ์ฌ์ฉํ๊ธฐ
โ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ธฐ
<body>
<h1 id="hello">์๋
ํ์ธ์</h1>
<script>
document.getElementById("hello").innerHTML = "์๋
";
document.getElementById("hello").style.fontSize = "50px";
</script>
</body>
โผ script ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
โผ h1 ํ๊ทธ์ "์๋ ํ์ธ์"๋ฅผ "์๋ "์ผ๋ก ๋ฐ๊พธ๊ณ ํฐํธ ํฌ๊ธฐ๋ฅผ 50px๋ก ๋ฐ๊พผ๋ค.
๐ฅ script ํ๊ทธ๋ ์๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. (HTML ํ์ผ์ ์ฝ์ ๋, ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ฝ๊ธฐ ๋๋ฌธ์ HTML ํ๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์ด๋์ผ JavaScript๊ฐ ์ ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค.)
โ eventListener ์ฌ์ฉํ๊ธฐ
/* addEventListener ์ฌ์ฉ ์ */
<button
class="alter-btn"
onclick="alterBnt('none')"
>
/* addEventListener ์ฌ์ฉ ํ */
<button
id="close"
>
<script>
document
.getElementById("close")
.addEventListener(
"click",
() => (document.getElementById("alter").style.display = "none")
);
</script>
โผ addEventListener({type}, {function})๋ฅผ ์ฌ์ฉํด์ ์ธ ์ ์๋ค. event์ ๋ํ ๊ฐ์์ ์ญํ ๋ก ์ฌ์ฉํ๋ค.
โผ event๋ ํด๋ฆญ, ํค์ ๋ ฅ, ์คํฌ๋กค, ๋๋๊ทธ ๋ฑ์ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค. (click, keydown, scroll, mouseover...)
โผ ํ๋ผ๋ฏธํฐ๋ฅผ 2๊ฐ ์ ๋ ฅํด์ ์ฌ์ฉํ๋ค. ('type', 'function')
โผ type์ด "click"์ผ ๊ฒฝ์ฐ, ํด๋น ํ๊ทธ๋ฅผ ํด๋ฆญํ๋ฉด event๊ฐ ๋ฐ์ํ๋ค.
โผ type์ด "input"์ผ ๊ฒฝ์ฐ, input ํ๊ทธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด event๊ฐ ๋ฐ์ํ๋ค.
โผ type์ด "chabge"์ผ ๊ฒฝ์ฐ, input ํ๊ทธ์ ๊ฐ์ ์ ๋ ฅํ๋ค๊ฐ mouse๋ก ๋ค๋ฅธ ๊ณณ์ ํด๋ฆญํ๋ฉด event๊ฐ ๋ฐ์ํ๋ค.
โผ ์ฐพ์ ํ๊ทธ๊ฐ img ์ด๊ฑฐ๋, window์ผ ๊ฒฝ์ฐ์ด๋ฉด์, type์ด "load"์ผ ๊ฒฝ์ฐ, DOM์ด ์์ฑ๋์์ผ๋ฉด์, ์ด๋ฏธ์ง, css, js ํ์ผ์ด ๋ก๋ ๋์๋์ง ์ฒดํฌ๊ฐ ๊ฐ๋ฅํ๋ค. -> image๊ฐ load ๋์์ ๋, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ฅ addEventListener()์ function์ ์ ๋ ฅํ ๋, ๋๋ค์์ ๋ฃ๋ ๊ฒ์ด ์๋, ์ด๋ฏธ ์์ฑํ function()์ ๋ฃ์ผ๋ฉด ํด๋น function์ด ์ด๊ธฐ์ ํ ๋ฒ ์คํ๋๋ค.
๐ฅ addEventListener๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค Ram ์ฉ๋์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์๋ 1๊ฐ๋ง ์ฐ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
โ HTML class ์์ฑ์ ์๋ก์ด ์์ ์ถ๊ฐํ๊ธฐ
<script>
document
.getElementById("sub-menu-button")
.addEventListener("click", () => {
document
.getElementById("sub-menu-list")
.classList.toggle("nav-sub-menu-show");
});
</script>
โผ document.getElementById("{id ๊ฐ}"): HTML ๋ฌธ์์์ id ๊ฐ์ ํด๋นํ๋ ํ๊ทธ ๊ฐ์ ธ์ค๊ธฐ
โผ .classList: ํด๋น ํ๊ทธ์ class ์์ฑ์ ์์ ๋ฆฌ์คํธ ๊ฐ์ ธ์ค๊ธฐ
โผ .toggle("{class ์ด๋ฆ}"): class ์ด๋ฆ์ด ์ด๋ฏธ ์์ผ๋ฉด ์ ๊ฑฐํ๊ณ ์์ผ๋ฉด ์ถ๊ฐํ๊ธฐ
โ Scroll ์ฌ์ฉํ๊ธฐ
โผ Window๋ Document๋ณด๋ค ๋ ํฐ ๋ฒ์์ด๋ค.
โผ window.addEventListener("scroll", {function})๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋กค์ ์กฐ์ํ ๋๋ง๋ค ์คํํ ํจ์๋ฅผ ์์ฑํ๋ค.
โผ window.scrollY๋ฅผ ํตํด ์ ์ ๊ฐ ์คํฌ๋กค์ ์ด๋์ ๋ ๋ด๋ ธ๋์ง ํ์ธํ ์ ์๋ค.
โผ window.scrollTo({x ์ขํ}, {y ์ขํ})๋ฅผ ํตํด ์ํ๋ ์ขํ๋ก ์คํฌ๋กค์ ๊ฐ์ ์ด๋์ํฌ ์ ์๋ค.
โผ window.scrollBy({x ์ขํ}, {y ์ขํ})๋ฅผ ํตํด ์ํ๋ ์ขํ๋ก ํ์ฌ ์์น์ ๋ํด์ ๊ฐ์ ์ด๋์ํฌ ์ ์๋ค.
โผ window.scrollTop({y ์ขํ})๋ฅผ ํตํด Y ์ขํ๋ก ์คํฌ๋กค์ ๊ฐ์ ์ด๋์ํฌ ์ ์๋ค.
โผ document.getElementById({Id ๊ฐ}).scrollTop์ ํตํด ํ๊ทธ์์ ์ด๋์ ๋ ์คํฌ๋กค ํ๋์ง ์ ์ ์๋ค.
โผ document.getElementById({Id ๊ฐ}).scrollHeight๋ฅผ ํตํด ํ๊ทธ์ ์คํฌ๋กค ์ด Height์ ์ ์ ์๋ค.
โผ scrollTop๊ณผ scrollHeight๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์์ด ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ์์น์ ์คํฌ๋กค์ ์ด ๊ธธ์ด๋ฅผ ๋น๊ตํ๊ธฐ ์ํด์๋ div์ height ๋งํผ scrollTop์ ๋ํ๊ณ ์ค์ฐจ๋ฅผ ์๊ฐํด์ ๊ณ์ฐํด์ผ ํ๋ค.
โผ document.getElementById({Id ๊ฐ}).clientHeight์ ํตํด div์ height์ ์ ์ ์๋ค.
๐ฅ Scroll EventListener๋ 1์ด์ 60๋ฒ ์ด์ ์คํ๋๊ธฐ ๋๋ฌธ์, ์ ์ ํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
๐ฅ ์ค๋ณต ์คํ๋ ์ ์๊ธฐ ๋๋ฌธ์, ์ค๋ณต ๋ฐฉ์ง ์ฝ๋๋ ํ์ํ๋ค.
โ JavaScript ์ฝ๋ import ํ๊ธฐ
<script src={javaScript ๊ฒฝ๋ก}></script>
โผ src ์์ฑ์ javaScript ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ฃผ๋ฉด import ํด์ ์ฌ์ฉํ ์ ์๋ค.
โ JavaScript ๋ก HTML์ ์์ ์ถ๊ฐํ๊ธฐ
let pTag = document.createElement("p");
pTag.innerHTML = "Test!";
document.querySelector("#test").appendChild(pTag);
โผ document.createElement("{ํ๊ทธ}")๋ก ํ๊ทธ๋ฅผ ์์ฑํ๋ค.
โผ ์ํ๋ ํ๊ทธ๋ฅผ ์ฐพ๊ณ .appendChild({๋ง๋ค์ด์ง ํ๊ทธ})๋ฅผ ์ฌ์ฉํ๋ฉด, ์ํ๋ ํ๊ทธ์ ์์์ผ๋ก ์ฝ์ ๋๋ค.
let tag = "<p> ์๋
</p>";
document.querySelector("#test").insertAdjacentHTML("beforeend", tag);
โผ ๋ฃ๊ณ ์ ํ๋ ํ๊ทธ๋ฅผ ๋ฌธ์์ด๋ก ์์ฑํ๊ณ .insertAdjacentHTML("{position}", "{ํ๊ทธ}")๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ๋ ํ๊ทธ์ ์์์ผ๋ก ์ฝ์ ํ ์ ์๋ค.
๐ฅ createElement()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ ์ข๋ค. (๊ทธ๋ฌ๋ ์ง๊ธ์ ๊ฑฐ์ ๋ฌด์ํด๋ ์ข์ ์ ๋์ด๋ค.)
๐ jQuery ์ฌ์ฉํ๊ธฐ
โ ์? (์ฌ์ฉ ์ด์ )
โผ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ HTML์ ์กฐ์ํ๋ฉด ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
โผ jQuery๋ HTML ์กฐ์ ๋ฌธ๋ฒ์ ์ฝ๊ฒ ๋ฐ๊ฟ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
โ jQuery ์ค์นํ๊ธฐ
1. jQuery CDN์ ๊ฒ์ํ ํ, ํด๋น ์ฌ์ดํธ์์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ minified๋ฅผ ์ ํํ์ฌ script๋ฅผ ๋ณต์ฌํ๋ค.
2. ๋ณต์ฌํ script๋ฅผ header ํ๊ทธ์ ๋ถ์ฌ ๋ฃ์ด์ ์ฌ์ฉํ๋ค.
โ jQuery ๋ฌธ๋ฒ
/* JavaScript ์ฌ์ฉ */
document.querySelector(".navbar-button").addEventListener("click", () => {
document
.getElementById("sub-menu-list")
.classList.toggle("nav-sub-menu-show");
});
/* JQuery ์ฌ์ฉ */
$(".navbar-button").click(() => {
$(".list-group").toggleClass("nav-sub-menu-show");
});
โผ document.querySelector()๋ฅผ $๋ก ์ฌ์ฉํ ์ ์๋ค.
โผ addEventListener()๋ฅผ on()์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
โผ addEventListener('click', {function})์ .click()์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
โผ .classList.toggle()์ .toggleClass()๋ก ์ฌ์ฉํ ์ ์๋ค.
$("#hello").html("๋ฐ๋ณด").css("color", "red");
โผ hello๋ผ๋ id๋ฅผ ๊ฐ์ง๊ณ ์๋ HTML ๋ฌธ์ ์ค ๋งจ ์ฒ์ ํ๊ทธ์ ๊ฐ์ "๋ฐ๋ณด"๋ก, ์์์ red๋ก ๋ณ๊ฒฝํ๋ค.
$(".hello").html("๋ฐ๋ณด").css("color", "red");
โผ hello class๋ฅผ ๊ฐ์ง๊ณ ์๋ HTML ๋ฌธ์ ์ค ๋งจ ์ฒ์ ํ๊ทธ์ ๊ฐ์ "๋ฐ๋ณด"๋ก, ์์์ red๋ก ๋ณ๊ฒฝํ๋ค.
$("#id1").hide();
$("#id1").fadeOut();
$("#id1").slideUp();
โผ hide(): display: none๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
โผ fadeOut() ๊ฐ์ด ๊ฐ๋จํ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค.
โผ ์ ๋๋ฉ์ด์ ์ JavaScript๋ก ์ฃผ๋ฉด ์ฑ๋ฅ์ ์ ์ข๊ธฐ ๋๋ฌธ์, CSS๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
๐ฅ ์ฃผ์: $("์ ๋ ํฐ")๋ก ์ฐพ์ผ๋ฉด jQuery ํจ์๋ง ๋ถ์ผ ์ ์๋ค.
๐ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋?
๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด ๋ฐ์ํ๋๋ฐ, ์ด๋ ์ด๋ฒคํธ๊ฐ ์์ html(์์)๋ก ํผ์ง๋ ํ์์ ์๋ฏธํ๋ค.
๋ค๋ฅด๊ฒ ๋งํ๋ฉด, ์์ ์์๋ฅผ ํด๋ฆญํด๋ ํ์ ์์๋ฅผ ํด๋ฆญํ ๊ฒ๊ณผ ๊ฐ๋ค.
โ ์ํฉ
<body>
<div id="modal" class="black-bg">
<div class="white-bg">
<h4>๋ก๊ทธ์ธํ์ธ์</h4>
<form id="login-form" action="form-success.html">
<div>
<input id="username" type="text" />
</div>
<div>
<input id="password" type="password" />
</div>
<button type="submit">์ ์ก</button>
<button type="button" onclick="clickModalCloseBtn()">๋ซ๊ธฐ</button>
</form>
</div>
</div>
</body>
<script>
document.getElementById("modal").addEventListener("click", () => {
document.getElementById("modal").classList.remove("show-modal");
});
</script>
โผ ๊ฒ์์ ๋ฐฐ๊ฒฝ์ ํด๋ฆญํ๋ฉด ๋ชจ๋ฌ์ฐฝ์ด ์ฌ๋ผ์ง๋๋ก javaScript ์ฝ๋๋ฅผ ์์ฑํ๋ค.
โผ ์ ์ฝ๋์์, "modal"์ด๋ผ๋ Id ๊ฐ์ ๊ฐ์ง ํ๊ทธ(๊ฒ์์ ๋ฐฐ๊ฒฝ)๋ฅผ ํด๋ฆญํ๋ฉด, show-modal ํด๋์ค๋ฅผ ์์ ์ ๋ชจ๋ฌ์ฐฝ์ ์ข ๋ฃํ๋ค.
โผ ์ค์ ๋ก ๋์ํด๋ณด๋ฉด, ํ์์ ๋ถ๋ถ์ ํด๋ฆญํด๋ ๋ชจ๋ฌ์ฐฝ์ด ์ข ๋ฃ๋๋ค.
โผ ์ด๋ "white-bg" class๋ฅผ ๊ฐ์ง div ํ๊ทธ๊ฐ "mode" id๋ฅผ ๊ฐ์ง ํ๊ทธ ์์์ผ๋ก ํฌํจ๋์ด ์๊ณ , ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์ํด ์์์์ ๋ฐ์ํ ์ด๋ฒคํธ๊ฐ ๋ถ๋ชจ์๊ฒ ์ ํ๋๊ธฐ ๋๋ฌธ์, ํ์์ ๋ฐฐ๊ฒฝ์ ํด๋ฆญํด๋ ๋ชจ๋ฌ์ฐฝ์ด ์ข ๋ฃ๋๋ค.
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
.addEventListener("click", (event) => {
event.target;
event.currentTarget;
event.preventDefault();
event.stopPropagation();
}
โผ ์ ์ฉํ ์ด๋ฒคํธ ๊ด๋ จ ํจ์๋ค์ ์ฌ์ฉํด์ ํด๊ฒฐํ๋ค.
โผ event.target: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ณณ, ์ ์ ๊ฐ ์ค์ ๋ก ๋๋ฅธ ํ๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
โผ event.currentTarget: ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋ฌ๋ฆฐ ๊ณณ, .addEventListener ์์ ํ๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
โผ event.preventDefault(): ์ด๋ฒคํธ ๊ธฐ๋ณธ ๋์์ ๋ง์์ค๋ค. addEventListener์ type(์ฌ๊ธฐ์๋ "click")์ ํด๋นํ๋ ๋์์ด ์ ๋๋ ธ๋ ๊ฒ์ฒ๋ผ ํ๋ํ๋ค.
โผ event.stopPropagation(): ๋ด ์์ ์์๋ก ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๋๋ ๊ฒ์ ๋ง์์ค๋ค.
๋ฐ๋ผ์, ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ ๊ฒ์์ ๋ฐฐ๊ฒฝ์ ํด๋ฆญํ์ ๊ฒฝ์ฐ์๋ง ๋ชจ๋ฌ์ฐฝ์ ๋ซ๋๋ค.
<script>
document.getElementById("modal").addEventListener("click", (event) => {
if (event.target === event.currentTarget) {
document.getElementById("modal").classList.remove("show-modal");
}
});
</script>
๐ SSR / CSR
โ SSR
server-side-rendering์ผ๋ก ์๋ฒ๊ฐ html์ ๋ค ๋ง๋ค์ด์ ํด๋ผ์ด์ธํธ ์๋ฒ์ ์ ๊ณตํ๋ค.
โ CSR
client-side-rendering์ผ๋ก ์๋ฒ๋ ๋ฐ์ดํฐ๋ง ์ ์กํ๊ณ ํด๋ผ์ด์ธํธ ์๋ฒ ์ธก์์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์งํํ๋ค.
๐ฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด๋, ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก HTML ํ๊ทธ์ ๊ฐ์ ๋ฃ๋ ์์
๐ fetch
โผ ES6๋ถํฐ JavaScript ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ค์ด์จ ํจ์๋ก, Promise ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ ๋ฆฌํ๋ค.
โผ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ ์ฅ์ ์ผ๋ก ์ธํด ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋ฉฐ, ์ฝ๋ ์ญ์ ๊ฐ๋จํ๋ค.
โ GET ์์ฒญ ๋ณด๋ด๊ธฐ
fetch("{url}")
.then((res) => res.json())
.then((data) => {
console.log(data);
})
.catch(() => {
console.log("์คํจ");
});
โผ fetch() ํจ์๋ฅผ ์ฌ์ฉํด์ GET ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
โผ then()์ผ๋ก ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
โผ catch()๋ก ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
โ POST ์์ฒญ ๋ณด๋ด๊ธฐ
const url = "{url}"
const option ={
method:'POST',
header:{
'Accept':'application/json',
'Content-Type':'application/json';charset=UTP-8'
},
body:JSON.stringify({
name:'test',
age: 10
})
fetch(url, options)
.then(res => console.log(res))
โผ fetch(url, {method, headers, body})๋ก POST ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
โผ Http Method, Http Header, Http Body๋ฅผ ์ ํด ์์ฒญ์ ํจ๊ป ๋ณด๋ผ ์ ์๋ค.
๐ AJax
โผ ์๋ก๊ณ ์นจ ์์ด GET, POST ์์ฒญ์ ํ ์ ์๋ ๊ธฐ๋ฅ
โผ form ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ GET, POST ์์ฒญ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ก๊ณ ์นจ๋๋ค.
โ ์์ AJax ์ฌ์ฉํ๊ธฐ
let req = new XMLHttpRequest();
let serverAddress = "{url}";
req.addEventListener("load", (res) => {
console.log(res.currentTarget.response);
});
req.open("GET", serverAddress);
req.send();
โผ XMLHttpRequest()๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ณด๋ด๊ณ , eventListener๋ฅผ ์ฌ์ฉํด์ ์๋ต์ ์ฒ๋ฆฌํ๋ค.
โ JQuery๋ก AJax ์ฌ์ฉํ๊ธฐ
<script>
$.get("{url}").done((res) => {
console.log(res);
})
.fail(() => {
console.log("์คํจ");
});
$.post("{url}", {๋ฐ์ดํฐ}).done((res) => {
console.log(res);
})
.fail(() => {
console.log("์คํจ");
});
</script>
โผ JQuery์ AJax๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
โผ $.get()์ผ๋ก GET ์์ฒญ์ ํ ์ ์๋ค.
โผ $.post()๋ก POST ์์ฒญ์ ํ ์ ์๋ค.
โผ done({callback})์ ์ฌ์ฉํ์ฌ ์์ฒญ์ด ์ฑ๊ณตํ์ ๋, ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ ์ ์๋ค.
โผ fail({callback})์ ์ฌ์ฉํ์ฌ ์์ฒญ์ด ์คํจํ์ ๋, ์ฒ๋ฆฌํ ์ ์๋ค.
๐ LocalStorage / SesstionStorge
โผ .js ํ์ผ์ด๋, script ํ๊ทธ ์์ ์ ์ธ๋ ๋ณ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจํ๋ฉด ์ฌ๋ผ์ง๋ค.
โผ LocalStorage / SesstionStorge ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
โผ key : value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
โผ ์ฉ๋์ 5MB, ๋ฌธ์ / ์ซ์๋ง ์ ์ฅํ ์ ์๋ค.
โผ LocalStorage๋ ์ฌ์ดํธ๋ฅผ ์ฌ์ ์ํด๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋์ง๋ง, SesstionStorage๋ ์ฌ์ดํธ๋ฅผ ๋๊ฐ๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋ค.
โ LocalStorage ์ฌ์ฉํ๊ธฐ
localStorage.setItem("{key}", "{value}")
localStorage.getItem("{key}")
localStorage.removeItem("{key}");
// Array, Object ์ ์ฅํ๊ธฐ
let testArray = [1, 2, 3];
let testObject = {
name: "test",
age: 10,
};
localStorage.setItem("Array", JSON.stringify(testArray));
localStorage.setItem("Object", JSON.stringify(testObject));
// Array, Object ๊ฐ์ ธ์์ ์ฌ์ฉํ๊ธฐ
let localStorageArray = localStorage.getItem("Array");
console.log(JSON.parse(localStorageArray));
โผ localStorage.setItem()์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
โผ localStorage.getItem()์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
โผ localStorage.removeItem()์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์๋ค.
โผ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด JSON.stringify()๋ฅผ ์ฌ์ฉํ์ฌ JSON์ผ๋ก ๋ณ๊ฒฝ ํ ์ ์ฅํ๋ค.
โผ JSON์ ๊ฐ์ ธ์์ ์๋ ํํ๋ก ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, JSON.parse()๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
โ SessionStorage ์ฌ์ฉํ๊ธฐ
sessionStorage.setItem("{key}", "{value}")
sessionStorage.getItem("{key}")
sessionStorage.removeItem("{key}");
// Array, Object ์ ์ฅํ๊ธฐ
let testArray = [1, 2, 3];
let testObject = {
name: "test",
age: 10,
};
sessionStorage.setItem("Array", JSON.stringify(testArray));
sessionStorage.setItem("Object", JSON.stringify(testObject));
// Array, Object ๊ฐ์ ธ์์ ์ฌ์ฉํ๊ธฐ
let sessionStorageArray = sessionStorage.getItem("Array");
console.log(JSON.parse(sessionStorageArray));
โผ LocalStorage์ ์ฌ์ฉ๋ฒ์ด ๋์ผํ๊ณ , sessionStorage๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
'Web > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript ES6 & ๊ฐ์ฒด ์งํฅ ๋ฌธ๋ฒ (1) | 2023.04.25 |
---|---|
[JavaScript] this ํค์๋ ์์๋ณด๊ธฐ (0) | 2023.04.24 |