HTML, CSS์ ํจ๊ป ์น์ ๊ตฌ์ฑํ๋ ์์ ์ค ํ๋๋ก ์น ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ์ ์ผํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
๊ฐ(value)์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ๊ธฐ ์ํ ์๋ณ์(identifier)
var ํค์๋๋ก ์ ์ธํ๊ณ = ์ฐ์ฐ์๋ก ํ ๋น
๋์ ํ์ดํ(dynamically typed): ์ ์ธ ์ ํ์
์ง์ ์์
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ ๊ฐ์ง
์์ ํ์
: number, string, boolean, null, undefined, symbol
๊ฐ์ฒด ํ์
: object (๋ฐฐ์ด, ํจ์, ์ ๊ทํํ์ ๋ฑ๋ ๊ฐ์ฒด)
๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ์ผ๋ก ์ง์ ๊ฐ ์์ฑ
์ฐ์ (+, -, *, /), ๋ฌธ์์ด ์ฐ๊ฒฐ (+),
ํ ๋น (=), ๋น๊ต (>, <, == ๋ฑ), ๋
ผ๋ฆฌ (&&, ||),
ํ์
(typeof), ์ธ์คํด์ค ์์ฑ (new) ๋ฑ
ํผ์ฐ์ฐ์ ํ์
์ด ๋ค๋ฅด๋ฉด ์๋ฌต์ ํ์
๋ณํ ์ํ
์ธ์ด์ ์์ฝ๋ ๋จ์ด๋ก ํน์ ๋์ ์ง์
var, function, return, if, for, while, break
/* โฆ */ ์ฌ์ฉํ๋ฉฐ ์ฝ๋ ์ค๋ช
์คํ ์ ํน์ ๋์์ ์ํ
์ธ๋ฏธ์ฝ๋ก (;)์ผ๋ก ๋๋
์ฝ๋ ๋ธ๋ก({ โฆ })์ผ๋ก ๊ทธ๋ฃนํ ๊ฐ๋ฅ
ํ๋์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ ๊ตฌ๋ฌธ
๋ฆฌํฐ๋ดยท์ฐ์ฐยทํจ์ ํธ์ถ ๋ฑ์ด ๋ชจ๋ ํํ์
ํํ์: ๊ฐ์ผ๋ก ํ๊ฐ๋ง ๊ฐ๋ฅ
๋ฌธ: ๊ฐ์ ์์ฑยท๋์
ํ๊ฑฐ๋ ํ๋ฆ ์ ์ด ๋ฑ ์คํ ๊ฐ๋ฅ
์์
๋จ์์ ์ฝ๋ ๋ธ๋ก
์ ์ธ๋ฌธ: function name(params){ โฆ }
ํธ์ถ: name(args)
ํค-๊ฐ ์(property)์ ์งํฉ
๋ฉ์๋(method): ๊ฐ์ด ํจ์์ธ ํ๋กํผํฐ
ํ๋กํ ํ์
์ ํตํด ์์ ์ฌ์ฉ
์์ฐจ์ ๋ฐ์ดํฐ ์ ์ฅ์ฉ ๊ฐ์ฒด
์ธ๋ฑ์ค๋ก ์์ ์ ๊ทผ
๋ค์ํ ๋ด์ฅ ๋ฉ์๋ ์ ๊ณต
๋ชจ๋ ์๋ฅผ 64๋นํธ ๋ถ๋์์์ ์ผ๋ก ์ฒ๋ฆฌ
Infinity, -Infinity, NaN ํฌํจ
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ๋์ฝ๋ ํ ์คํธ, ์์/ํฐ ๋ฐ์ดํ ๋๋ ๋ฐฑํฑ ์ฌ์ฉ
true ๋๋ false
์ ์ธ๋ง ํ๊ณ ํ ๋นํ์ง ์์ ๋ณ์์ ์ด๊ธฐ๊ฐ
โ๊ฐ์ด ์์โ์ ๋ช ์
์ ์ผ๋ฌด์ดํ ์๋ณ์์ฉ ์์๊ฐ
ํค-๊ฐ ์์ ์งํฉ์ผ๋ก, ํ๋กํผํฐ์ ๋ฉ์๋ ํฌํจ
var, let, const๋ก ์ ์ธ = ์ฐ์ฐ์๋ก ํ ๋น
์ ์ธ๋ง ํ๋ฉด undefined, ์ ์ธ ์์ด ์ฐธ์กฐ ์ ReferenceError
๋ณ์ ์ ์ธ ์ ํ์
์ง์ ๋ถํ์
ํ ๋น๋ ๊ฐ์ ๋ฐ๋ผ ํ์
์ด ์๋ ๊ฒฐ์ (typeof๋ก ํ์ธ ๊ฐ๋ฅ)
var ์ ์ธ๋ฌธ์ ์ค์ ์ฝ๋ ์ต์๋จ์ ์ ์ธยท์ด๊ธฐํ๋ ๊ฒ์ฒ๋ผ ๋์
์ ์ธ ์ด์ ์ ์ฐธ์กฐํด๋ undefined๋ฅผ ๋ฐํ
ํํ์(expression): ํ๊ฐ๋์ด ํ๋์ ๊ฐ์ด ๋๋ ์ฝ๋
์ฐ์ฐ์๋ ํํ์์ ๊ฒฐํฉํด ์ ๊ฐ์ ๋ง๋ ๋ค
๋ฌธ(statement): ์คํ ์ ๋์์ ์ํ (var, if, for ๋ฑ)
ํํ์์ ๊ฐ์ผ๋ก ํ๊ฐ
๋ฌธ์ ์ ์ด ํ๋ฆ์ด๋ ์ ์ธ ๋ฑ
ํ๋ ์ด์์ ํผ์ฐ์ฐ์(operand)๋ฅผ ์ฒ๋ฆฌํด ๊ฐ์ ์์ฑ
์ฐ์ ยทํ ๋นยท๋น๊ตยท๋
ผ๋ฆฌยทํ์
์ฐ์ฐ ๋ฑ ๋ค์ํ ์ข
๋ฅ
์ํ์ ๊ณ์ฐ์ ์ํํด ์๋ก์ด ์ซ์ ๊ฐ์ ๋ง๋ ๋ค
์ฐ์ ์ฐ์ฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ NaN์ ๋ฐํํ๋ค
| ์ฐ์ฐ์ | ์๋ฏธ |
|---|---|
+ | ๋ง์ |
- | ๋บ์ |
* | ๊ณฑ์ |
/ | ๋๋์ |
% | ๋๋จธ์ง |
| ์ฐ์ฐ์ | ์๋ฏธ |
|---|---|
++ | ์ฆ๊ฐ (ํผ์ฐ์ฐ์์ ๊ฐ์ 1๋งํผ ์ฆ๊ฐ์ํค๋ฉฐ, ์์น์ ๋ฐ๋ผ ์ ์/ํ์ ์ฆ๊ฐ ๋์์ด ๋ฌ๋ผ์ง) |
-- | ๊ฐ์ (ํผ์ฐ์ฐ์์ ๊ฐ์ 1๋งํผ ๊ฐ์์ํค๋ฉฐ, ์์น์ ๋ฐ๋ผ ์ ์/ํ์ ์ฆ๊ฐ ๋์์ด ๋ฌ๋ผ์ง) |
+ | ๋ถํธ ์ฐ์ฐ์: ์๋ฌด๋ฐ ๋ถ์ ํจ๊ณผ ์์ด ํผ์ฐ์ฐ์๋ฅผ ์ซ์ ํ์ ์ผ๋ก ๋ณํํ์ฌ ๋ฐํ |
- | ๋ถํธ ์ฐ์ฐ์: ํผ์ฐ์ฐ์์ ๋ถํธ๋ฅผ ๋ฐ์ ํ ๊ฐ์ ๋ฐํ (์์๋ฅผ ์์๋ก, ์์๋ฅผ ์์๋ก), ์ซ์ ํ์ ์ด ์๋ ๊ฐ์ ์ซ์๋ก ๋ณํ ํ ๋ถํธ ๋ฐ์ |
+: ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ ๋ฌธ์์ด์ด๋ฉด ๋ฌธ์์ด ๊ฒฐํฉ
| ์ฐ์ฐ์ | ์ฌ๋ก | ๋์ผ ํํ |
|---|---|---|
= | x = y | x = y |
+= | x += y | x = x + y |
-= | x -= y | x = x - y |
*= | x *= y | x = x * y |
/= | x /= y | x = x / y |
%= | x %= y | x = x % y |
์ขํญ๊ณผ ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋น๊ตํ์ฌ boolean ๊ฐ์ ๋ฐํํ๋ค
| ์ฐ์ฐ์ | ์ค๋ช |
|---|---|
== | ๋๋ฑ ๋น๊ต: ๊ฐ๋ง ๊ฐ์ผ๋ฉด true (x == y) |
=== | ์ผ์น ๋น๊ต: ๊ฐ๊ณผ ํ์
๋ชจ๋ ๊ฐ์์ผ true (x === y) |
!= | ๋ถ๋ฑ ๋น๊ต: ๊ฐ์ด ๋ค๋ฅด๋ฉด true (x != y) |
!== | ๋ถ์ผ์น ๋น๊ต: ๊ฐ ๋๋ ํ์
์ด ๋ค๋ฅด๋ฉด true (x !== y) |
| ์ฐ์ฐ์ | ์ฌ๋ก | ์ค๋ช |
|---|---|---|
> | x > y | x๊ฐ y๋ณด๋ค ํฌ๋ค |
< | x < y | x๊ฐ y๋ณด๋ค ์๋ค |
>= | x >= y | x๊ฐ y๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฌ๋ค |
<= | x <= y | x๊ฐ y๋ณด๋ค ๊ฐ๊ฑฐ๋ ์๋ค |
๋ฌธ๋ฒ: ์กฐ๊ฑด์ ? ์ฐธ๊ฐ : ๊ฑฐ์ง๊ฐ
ํํ์์ด๋ฏ๋ก ๋ค๋ฅธ ํํ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ
&& (AND), || (OR): ํผ์ฐ์ฐ์ ์ค ํ๋๋ฅผ ๋ฐํ, ๋จ์ถ ํ๊ฐ
! (NOT): ๋ถ๋ฆฌ์ธ์ผ๋ก ๋ณํ ํ ๋ฐ์
,: ์ฌ๋ฌ ํํ์์ ์์ฐจ ํ๊ฐ ํ ๋ง์ง๋ง ๊ฐ ๋ฐํ
(...): ์ฐ์ ์์ ์ ์ด, ๊ดํธ ์์ ๋จผ์ ํ๊ฐ
typeof x: ํผ์ฐ์ฐ์์ ํ์
์ ๋ฌธ์์ด๋ก ๋ฐํ
์ฃผ์: typeof null์ "object", ์ ์ธ ์ ๋ ์๋ณ์๋ "undefined" ๋ฐํ
{ โฆ }๋ก ๋ฌถ์ธ ๋ฌธ๋ค์ ์งํฉ
ํ๊ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ญ(๋ธ๋ก๋ฌธ)์ ์คํ์ ๊ฒฐ์
if (์กฐ๊ฑด) { โฆ } else if (์กฐ๊ฑด) { โฆ } else { โฆ }
์กฐ๊ฑด์ ๋ถ๋ฆฌ์ธ์ผ๋ก ํ๊ฐ, ์ค๊ดํธ ์๋ต ๊ฐ๋ฅ
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ก ๋์ฒด ๊ฐ๋ฅ
switch (๊ฐ) { case A: โฆ; break; โฆ; default: โฆ }
์ผ์นํ๋ case๋ก ์ ํ, break๋ก ํด์ค๋ฃจ ๋ฐฉ์ง
์ฌ๋ฌ case ๋ฌถ๊ฑฐ๋ default ์๋ต ๊ฐ๋ฅ
ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ธ ๊ฒฝ์ฐ ์ฝ๋ ๋ธ๋ญ์ ์คํ
for (์ด๊ธฐ; ์กฐ๊ฑด; ์ฆ๊ฐ) { โฆ }
์ด๊ธฐโ์กฐ๊ฑดโ๋ธ๋กโ์ฆ๊ฐ ์์ผ๋ก ๋ฐ๋ณต
์ด๊ธฐยท์กฐ๊ฑดยท์ฆ๊ฐ ๋ชจ๋ ์๋ตํ๋ฉด ๋ฌดํ ๋ฃจํ
while (์กฐ๊ฑด) { โฆ }
์กฐ๊ฑด์ด ์ฐธ์ธ ๋์ ๋ฐ๋ณต, ๋ฌดํ ๋ฃจํ ์ break๋ก ํ์ถ
do { โฆ } while (์กฐ๊ฑด);
๋ณธ๋ฌธ์ ์ต์ ํ ๋ฒ ์คํ ํ ์กฐ๊ฑด ๊ฒ์ฌ
break; ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๋ณต๋ฌธ ๋๋ switch ํ์ถ
๋ฐ๋ณต๋ฌธ์ ๋ ์ด์ ์งํํ์ง ์์๋ ๋ ๋ ๋ถํ์ํ ๋ฐ๋ณต์ ํํผ
continue; ๋ก ๋ฐ๋ณต๋ฌธ์ ํ์ฌ ์ํ๋ง ์ค๋จํ๊ณ ์ฆ๊ฐ์์ผ๋ก ์ด๋
๋ถํ์ํ ๋ค์ฌ์ฐ๊ธฐ ๋ฐฉ์ง์ฉ์ผ๋ก ํ์ฉ
์๋ฌต์ ํ์ ๋ณํ & ๋ช ์์ ํ์ ๋ณํ ์ผ๋ก ๊ตฌ๋ถ
์๋ฌต์ ํ์ ๋ณํ: ์ฐ์ฐ๋ฌธ๋งฅ์ ๋ง์ถฐ JS ์์ง์ด ์๋์ผ๋ก ๋ณํ
๋ฌธ์์ด ์ฐ๊ฒฐ(+): ํผ์ฐ์ฐ์๊ฐ ๋ฌธ์์ด์ด๋ฉด ๋ค๋ฅธ ๊ฐ์ ๋ชจ๋ ๋ฌธ์์ด๋ก ๋ณํ
์ฐ์ ยท๋น๊ต ์ฐ์ฐ๋ฌธ๋งฅ: ํผ์ฐ์ฐ์๊ฐ ์ซ์๊ฐ ์๋๋ฉด ์ซ์๋ก ๊ฐ์ ๋ณํ, ์คํจ ์ NaN
'5' * 2 // 10
'a' - 1 // NaN
'3' > 1 // true
์กฐ๊ฑด๋ฌธยท๋ ผ๋ฆฌ ์ฐ์ฐ๋ฌธ๋งฅ: ๊ฐ์ด Falsy(0, '' ๋น ๋ฌธ์์ด, null, undefined, NaN, false)๋ฉด false, ๊ทธ ์ธ๋ true
๋ช
์์ ํ์
๋ณํ(ํ์
์บ์คํ
): ๊ฐ๋ฐ์๊ฐ toString(), Number(), Boolean() ๋ฑ์ผ๋ก ์ง์ ๋ณํ
String(x), x.toString(), x + ''
String(1) // "1"
(1).toString() // "1"
1 + '' // "1"
Number(x), parseInt(x), +x, x * 1
Number('2') // 2
parseInt('2')// 2
+'2' // 2
'2' * 1 // 2
Boolean(x), !!x
Boolean(0) // false
!!{} // true
๋
ผ๋ฆฌ์ฐ์ฐ์ &&, ||๋ ๊ฒฐ๊ณผ ๊ฒฐ์ ํผ์ฐ์ฐ์๋ฅผ ๊ทธ๋๋ก ๋ฐํ
| ๋จ์ถ ํ๊ฐ ํํ์ | ํ๊ฐ ๊ฒฐ๊ณผ |
|---|---|
true // anything | true |
false // anything | anything |
true && anything | anything |
false && anything | false |
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด ๊ธฐ๋ฐ ์ธ์ด
ํค(key) ์ ๊ฐ(value) ์ผ๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ(property) ๋ค์ ์งํฉ
ํจ์๋ ๊ฐ์ด๋ฏ๋ก, ํ๋กํผํฐ ๊ฐ์ผ๋ก ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ โ ๋ฉ์๋(method)
ํค: ๋ฌธ์์ด ๋๋ Symbol (๋น ๋ฌธ์์ด ํฌํจ ๊ฐ๋ฅ)
๊ฐ: ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ
๊ฐ์ ํค ์ค๋ณต ์ ๋์ค ๊ฒ์ด ๋ฎ์ด์
๊ฐ์ฒด์ ํ๋กํผํฐ ์์๋ ๋ณด์ฅ๋์ง ์์
ํ๋กํผํฐ ๊ฐ์ด ํจ์์ผ ๊ฒฝ์ฐ ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๊ฐ์ฒด์ ๋์(ํ์)์ ์ ์
javascript๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก์ ํด๋์ค๋ผ๋ ๊ฐ๋ ์ด ์๊ณ ๋ณ๋์ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์ด ์กด์ฌ
{} ์ฌ์ฉ
๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ผ๋ฐ์ ์ธ ๋ฐฉ์
var person = { name: 'Kim', gender: 'female' };
new Object()๋ก ์์ฑ ํ ํ๋กํผํฐ ์ถ๊ฐ
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์๋ณด๋ค ๋ณต์กํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉ๋์ง ์์
์ ํจํ ์๋ณ์๋ ๋ฐ์ดํ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ (๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐ์ดํ ํ์)
ํํ์ ํค๋ []๋ก ๋ฌถ์ด ์ฌ์ฉ.
. ๋๋ []ํ๊ธฐ๋ฒ ์ฌ์ฉ
[]๋ ๋ฌธ์์ด ๋๋ ํํ์ ์ฌ์ฉ ๊ฐ๋ฅ
์กด์ฌํ์ง ์๋ ํ๋กํผํฐ ์ ๊ทผ ์ undefined ๋ฐํ
๊ธฐ์กด ํ๋กํผํฐ์ ์ ๊ฐ์ ํ ๋นํ๋ฉด ๊ฐ์ด ๊ฐฑ์
์กด์ฌํ์ง ์๋ ํค์ ๊ฐ์ ํ ๋นํ๋ฉด ์ ํ๋กํผํฐ๊ฐ ์์ฑ
delete ์ฐ์ฐ์๋ก ํ๋กํผํฐ ์ญ์ ๊ฐ๋ฅ
๊ฐ์ฒด์ ๋ชจ๋ ์ด๊ฑฐ ๊ฐ๋ฅํ ํ๋กํผํฐ์ ๋ํ ๋ฃจํ ์ํ
๋ฐฐ์ด์ ์ฌ์ฉ ์ ์์์น ๋ชปํ ๊ฒฐ๊ณผ ๋ฐ์ ๊ฐ๋ฅ
var person = {
name: 'Kim',
age: 22,
gender: 'female'
};
for (var key in person) {
console.log(key + ': ' + person[key]);
}
๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ์ด ์ ๋ฌ๋จ
์ฌ๋ฌ ๋ณ์๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด ํ์ชฝ์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ์ชฝ์๋ ๋ฐ์๋๋ค
์์ ํ์
์ ๋ณต์ฌ๋์ด ์ ๋ฌ๋จ
๋ณ์ ๊ฐ ๋
๋ฆฝ์ ์ด๋ฉฐ, ํ์ชฝ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ์ชฝ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค
Built-in Object: JS ์์ง์ ๋ด์ฅ (์: Object, Array, Function ๋ฑ)
Native Object: BOM/DOM ๊ด๋ จ ๊ฐ์ฒด (์: window, document ๋ฑ)
Host Object: ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด
JavaScript์ ์์ ํ์
(Boolean, null, undefined, Number, String, Symbol) ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ
์ฌํ ๋น์ ๊ฐ๋ฅํ์ง๋ง ๊ธฐ์กด ๊ฐ ์์ฒด๋ฅผ ์์ ํ ์๋ ์๋ค
let str = 'Hello';
str = 'World'; // 'Hello'๋ ๊ทธ๋๋ก, 'World'๋ ์๋ก ์์ฑ๋จ
๊ฐ์ฒด(Object)๋ ์ฐธ์กฐ ํ์
์ด๋ฉฐ, ์ง์ ์์ ์ด ๊ฐ๋ฅ
๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์๋ณธ์ด ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค
var arr = [];
arr.push(2); // ์๋ณธ ๋ฐฐ์ด(arr)์ด ์ง์ ๋ณ๊ฒฝ๋จ
์๋ํ์ง ์์ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ์์ธ์ ๋๋ค์๋ โ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ ๋ค๋ฅธ ๊ฐ์ฒด์์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝโํ๊ธฐ ๋๋ฌธ -> ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ๊ฐ์ฒด๋ก ๋ง๋ค์ด ํ๋กํผํฐ์ ๋ณ๊ฒฝ์ ๋ฐฉ์ง
๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ฑฐ๋ ๋ณํฉํ ๋ ์ฌ์ฉ
์์ ๋ณต์ฌ(shallow copy)๋ฅผ ํ๋ฏ๋ก ์ค์ฒฉ ๊ฐ์ฒด๋ ์ฌ์ ํ ์ฐธ์กฐ๋จ
๊ฐ์ฒด๋ฅผ ๋๊ฒฐํ์ฌ ํ๋กํผํฐ ์์ , ์ถ๊ฐ, ์ญ์ ๋ฅผ ๋ง์
์ค์ฒฉ ๊ฐ์ฒด๋ ๋๊ฒฐ๋์ง ์์ผ๋ฏ๋ก ๋ด๋ถ ๊ฐ์ฒด๊น์ง ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๋ ค๋ฉด deep freeze ํ์
Map, List, Set ๋ฑ ๋ค์ํ ๊ตฌ์กฐ ์ง์
๊ฐ์ฒด ์์ ์ ๊ธฐ์กด ๊ฐ์ฒด๋ ์ ์ง๋๊ณ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํ
์ด๋ค ์์ ์ ์ํํ๊ธฐ ์ํด ํ์ํ ๋ฌธ(statement)๋ค์ ์งํฉ์ ์ ์ํ ์ฝ๋ ๋ธ๋ก
ํจ์๋ฅผ ์ ์ํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
- ํจ์ ์ ์ธ๋ฌธ
- ํจ์ ํํ์
- Function ์์ฑ์ ํจ์
function ํจ์๋ช
() {}
ํธ์ด์คํ
๋์ด ์ ์ธ ์ด์ ์๋ ํธ์ถ ๊ฐ๋ฅ
๋ณ์์ ํจ์ ๋ฆฌํฐ๋ด์ ํ ๋น
์ต๋ช
ํจ์ ๊ฐ๋ฅ
const add = function(a, b) {
return a + b;
};
console.log(add(3, 4)); // 7
ํธ์ด์คํ ์ undefined๋ก ์ด๊ธฐํ๋จ
new Function('param', 'body')๋ก ์ ์
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์์
ํจ์ ์ ์ธ๋ฌธ์ ์ฝ๋์ ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ ธ ๋จผ์ ์คํ ๊ฐ๋ฅ
ํจ์ ํํ์์ ๋ณ์ ํธ์ด์คํ
๋ง ๋์ด ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ
sayHello(); // ์คํ ๊ฐ๋ฅ
function sayHello() {
console.log("์๋
ํ์ธ์!");
}
์ผ๊ธ ๊ฐ์ฒด ์กฐ๊ฑด
- ๋ฌด๋ช ์ ๋ฆฌํฐ๋ด๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
- ๋ณ์๋ ์๋ฃ ๊ตฌ์กฐ(๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)์ ์ ์ฅํ ์ ์๋ค.
- ํจ์์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ ์ ์๋ค.
- ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
=> JavaScript์ ํจ์๋ ์ผ๊ธ๊ฐ์ฒด
parameter: ํจ์ ์ ์ ์ ์ฌ์ฉ
argument: ํจ์ ํธ์ถ ์ ์ ๋ฌ
์์๊ฐ์ ๋ณต์ฌ๋์ด ์ ๋ฌ
ํจ์ ํธ์ถ ์ ์์ ํ์
์ธ์๋ฅผ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ํจ์๋ก ์ ๋ฌํ๋ ๋ฐฉ์
ํจ์ ๋ด๋ถ ๋ณ๊ฒฝ์ด ์๋ณธ์ ์ํฅ ์๋ค
๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ์ด ์ ๋ฌ
ํจ์ ํธ์ถ ์ ์ฐธ์กฐ ํ์
์ธ์๋ฅผ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ณต์ฌ๋์ง ์๊ณ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ด ๋งค๊ฐ๋ณ์์ ์ ์ฅ๋์ด ํจ์๋ก ์ ๋ฌ๋๋ ๋ฐฉ์
ํจ์ ๋ด๋ถ ๋ณ๊ฒฝ์ด ์๋ณธ ๊ฐ์ฒด์ ์ํฅ
return์ ์ฌ์ฉํด ๊ฐ์ ๋ฐํ
์๋ต ์ undefined
๋ฐฐ์ด ๋ฑ์ผ๋ก ์ฌ๋ฌ ๊ฐ ๋ฐํ ๊ฐ๋ฅ
ํจ์ ๋ด์์ ์ ๋ฌ๋ ์ธ์๋ฅผ ์ ์ฌ ๋ฐฐ์ด๋ก ์ ๊ณต
๊ฐ๋ณ ์ธ์ ํจ์์ ์ ์ฉ
์์ ์ ํธ์ถํ ํจ์ ์ฐธ์กฐ
๋๋ฒ๊น
๋ฑ์ ์ฌ์ฉ, ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์์
ํจ์ ์ ์ ์ ๋ช ์ํ ๋งค๊ฐ๋ณ์ ๊ฐฏ์
ํจ์๋ช
์ต๋ช
ํจ์๋ ๋น ๋ฌธ์์ด ๋ฐํ
๊ฐ์ฒด์ ํ๋กํ ํ์ ์ ์ ๊ทผํ์ฌ ๊ฐ์ฒด๊ฐ์ ์์ ๊ตฌํ
ํจ์ ๊ฐ์ฒด๋ง์ด ๊ฐ์ง๋ ํ๋กํผํฐ
์์ฑ์ ํจ์๋ก ํธ์ถ ์ ์ธ์คํด์ค์ ํ๋กํ ํ์ ์ญํ
์ ์์ ๋์์ ์คํ
๋ณ์/ํจ์ ์ถฉ๋ ๋ฐฉ์ง์ ์ ์ฉ
(function() {
console.log('์ฆ์ ์คํ!');
})();
๋ด๋ถ ํจ์๋ ๋ถ๋ชจ ํจ์์ ๋ณ์์ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, ๋ถ๋ชจ ํจ์๋ ๋ด๋ถ ํจ์์ ๋ณ์์ ์ ๊ทผ ๋ถ๊ฐ
๋ด๋ถ ํจ์๋ ์ธ๋ถ์์ ์ง์ ํธ์ถํ ์ ์๋ค
function parent(param) {
var parentVar = param;
function child() {
var childVar = 'kim';
console.log(parentVar + ' ' + childVar); // OK
}
child();
console.log(childVar); // ์ค๋ฅ ๋ฐ์
}
์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์
๋ฐ๋์ ์ข
๋ฃ ์กฐ๊ฑด(ํ์ถ ์กฐ๊ฑด) ์ด ์์ด์ผ ๋ฌดํ ํธ์ถ์ ๋ง์ ์ ์์
๋ฐ๋ณต๋ฌธ ๋์ ์ฌ์ฉ๋์ง๋ง, ์ง๊ด์ ์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์ง
function factorial(n) {
if (n < 2) return 1;
return factorial(n - 1) * n;
}
ํน์ ์ด๋ฒคํธ๋ ์ํฉ์์ ํธ์ถ๋๋ ํจ์
๋ช
์์ ์ผ๋ก ํธ์ถํ์ง ์๊ณ , ์ด๋ฒคํธ๋ ๋น๋๊ธฐ ์์
์ด ์๋ฃ๋์์ ๋ ํธ์ถ๋จ
ํจ์๋ฅผ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌํ์ฌ ์ฌ์ฉ
JavaScript๋ ๋์ ํ์ ์ธ์ด์ด๋ฏ๋ก ๋ณ์์ ํ์ ์ ์ฌ์ ์ ์ง์ ํ ์ ์๋ค. ์ด๋ก ์ธํด ์๋์น ์์ ํ์ ์ ๊ฐ์ด ์ ๋ฌ๋๊ฑฐ๋ ๋ฐํ๋ ์ ์์ด, ํ์ ์ฒดํฌ๊ฐ ๋งค์ฐ ์ค์ํ๋ค.
ํผ์ฐ์ฐ์์ ๋ฐ์ดํฐ ํ์ ์ ๋ฌธ์์ด๋ก ๋ฐํ
typeof ''; // 'string'
typeof 1; // 'number'
typeof NaN; // 'number'
typeof true; // 'boolean'
typeof []; // 'object'
typeof {}; // 'object'
typeof function() {}; // 'function'
typeof null; // 'object' (์ค๊ณ์ ์ค๋ฅ)
typeof undefined; // 'undefined'
๋จ์ : ๋ฐฐ์ด, null, Date ๋ฑ ๊ฐ์ฒด์ ์ธ๋ถ ํ์ ์ ํ๋ณ ๋ถ๊ฐ
๋ชจ๋ ๊ฐ์ ์ ํํ ํ์
์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ
Object.prototype.toString.call(value) ํํ
function getType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
๊ฐ์ฒด๊ฐ ํน์ ์์ฑ์(constructor)์ ์ธ์คํด์ค์ธ์ง ํ์ธํ ๋ ์ฌ์ฉ
ํ๋กํ ํ์
์ฒด์ธ์ ๋ฐ๋ผ ์ฌ๋ผ๊ฐ๋ฉฐ ์ผ์น ์ฌ๋ถ ํ๋จ
console.log(person instanceof Person); // true
๋ฐฐ์ด์ฒ๋ผ length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋ฉฐ ์ํ ๊ฐ๋ฅํ ๊ฐ์ฒด
์: arguments, NodeList, HTMLCollection, ๋ฌธ์์ด
Array.isArray ํํ
console.log(Array.isArray([])); // true
์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋์ค๊ฐ ์๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด
๋ชจ๋ ๊ฐ์ฒด๋ [[Prototype]]์ ํตํด ๋ถ๋ชจ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋์ด ์๊ณ , ์์์ ํตํด ๋ถ๋ชจ์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค
[[Prototype]] vs prototype ํ๋กํผํฐ
[[Prototype]]: ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ๋ด๋ถ ์ฌ๋กฏ, ์์ ์ ๋ถ๋ชจ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด (__proto__๋ก ์ ๊ทผ ๊ฐ๋ฅ)
prototype: ํจ์ ๊ฐ์ฒด๋ง ๊ฐ์ง๋ฉฐ, ์์ฑ์๋ก ํธ์ถ๋ ๋ ์์ฑ๋๋ ๊ฐ์ฒด์ ๋ถ๋ชจ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด.
ํ๋กํ ํ์
๊ฐ์ฒด๋ constructor ํ๋กํผํฐ๋ฅผ ๊ฐ์ง
ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์์ฑ์ ํจ์๋ฅผ ์ฐธ์กฐ
function Person(name) {
this.name = name;
}
const foo = new Person('kim');
console.log(foo.constructor === Person); // true
๊ฐ์ฒด์์ ํ๋กํผํฐ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด [[Prototype]]์ ๋ฐ๋ผ ์์ ์ฒด์ธ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ๊ฒ์
๊ฐ์ฒด ๋ฆฌํฐ๋ด โ Object() ์์ฑ์ ํจ์์ ์ํด ์์ฑ
ํด๋น ๊ฐ์ฒด์ ํ๋กํ ํ์
์ Object.prototype
๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ
1. ๊ฐ์ฒด ๋ฆฌํฐ๋ด
2. ์์ฑ์ ํจ์
3. Object() ์์ฑ์ ํจ์
์์ฑ์ ํจ์๋ก ๊ฐ์ฒด ์์ฑ ์, ์์ฑ์ ํจ์์ prototype์ด ํด๋น ๊ฐ์ฒด์ ํ๋กํ ํ์
์ด ๋๋ค
์ด prototype๋ Object.prototype์ ์์
function Person(name) { this.name = name; }
const foo = new Person('Lee');
console.log(foo.__proto__ === Person.prototype); // true
ํ๋กํ ํ์
๊ฐ์ฒด๋ ์ผ๋ฐ ๊ฐ์ฒด์ฒ๋ผ ํ๋กํผํฐ ์ถ๊ฐ/์ญ์ ๊ฐ๋ฅ
์ถ๊ฐ๋ ๋ฉ์๋๋ ํด๋น ํ๋กํ ํ์
์ ์์ํ๋ ๋ชจ๋ ๊ฐ์ฒด์์ ์ฌ์ฉ ๊ฐ๋ฅ
Person.prototype.sayHello = function() {
console.log('Hello');
};
์์๊ฐ๋ ์์ ๊ฐ์ฒด๋ก ๊ฐ์ธ์ ธ ํ๋กํ ํ์
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์
String.prototype ๋ฑ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด ์์ ๋ฌธ์์ด๋ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ
String.prototype.myMethod = function() {
return 'extended';
};
console.log('abc'.myMethod()); // 'extended'
์์ฑ์ ํจ์์ prototype์ ๋ณ๊ฒฝํ๋ฉด, ๋ณ๊ฒฝ ์ดํ ์์ฑ๋ ์ธ์คํด์ค์๋ง ๋ฐ์๋จ
๊ธฐ์กด ์ธ์คํด์ค๋ ์ด์ ํ๋กํ ํ์
์ ๊ณ์ ์ฐธ์กฐ
function Person(name) { this.name = name; }
const foo = new Person('Lee');
Person.prototype = { gender: 'male' };
const bar = new Person('Kim');
console.log(foo.gender); // undefined
console.log(bar.gender); // 'male'
์ฐธ์กฐ(์ฝ๊ธฐ) ์: ํด๋น ๊ฐ์ฒด์ ์์ผ๋ฉด ํ๋กํ ํ์
์ฒด์ธ ๋์
ํ ๋น(์ฐ๊ธฐ) ์: ์ฒด์ธ์ด ๋์ํ์ง ์๊ณ ํด๋น ๊ฐ์ฒด์ ์ง์ ์์ฑ์ ์ถ๊ฐํ๊ฑฐ๋ ์์
foo.gender = 'female'; // foo์ gender ํ๋กํผํฐ๊ฐ ์๋ก ์์ฑ๋จ
์ค์ฝํ(Scope) ๋ ์๋ณ์๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค
์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋ณ์๋ฅผ ์ฐพ์ ๋, ์ ์ธ๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์ฝํ๋ฅผ ๋ฐ๋ผ ์๋ณ์๋ฅผ ํ์ํ๋ค
์ค์ฝํ๊ฐ ์๋ค๋ฉด ๋ชจ๋ ๋ณ์๋ ์ ์ญ์ด ๋์ด ์ถฉ๋์ด ์ผ์ด๋๋ค
์ ์ญ ์ค์ฝํ: ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅ
์ง์ญ ์ค์ฝํ: ํจ์ ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
๋ณ์๋ ์ ์ธ ์์น์ ๋ฐ๋ผ ์ ์ญ ๋๋ ์ง์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค
๊ธฐ๋ณธ์ ์ผ๋ก ํจ์ ๋ ๋ฒจ ์ค์ฝํ(function-level scope) ๋ฅผ ๋ฐ๋ฅธ๋ค
๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ(block-level scope) ๋ let๊ณผ const ์ฌ์ฉ ์์๋ง ๊ฐ๋ฅํ๋ค
์ ์ญ์์ ์ ์ธ๋ ๋ณ์๋ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅ
var๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ window ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋๋ค
์๋ฐ์คํฌ๋ฆฝํธ๋ ์คํ ์ง์
์ (main ํจ์ ๋ฑ)์ด ์์ด ์ ์ญ ๋ณ์ ๋จ์ฉ์ด ์ฌ์ โ ์ง์ํด์ผ ํจ
var๋ก ์ ์ธํ ๋ณ์๋ ๋ธ๋ก ๋ด๋ถ์์๋ ์ ์ญ ๋๋ ํจ์ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค
if (true) {
var x = 5;
}
console.log(x); // 5
ํจ์ ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์๋ ํด๋น ํจ์ ๋ด์์๋ง ์ ํจ
์ค์ฒฉ ํจ์๋ ์์ ํจ์์ ๋ณ์์๋ ์ ๊ทผ ๊ฐ๋ฅ
๋ณ์๋ช
์ด ์ค๋ณต๋๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ์ค์ฝํ์ ๋ณ์๊ฐ ์ฐ์ ๋๋ค (์ค์ฝํ ์ฒด์ธ)
์ ์ธ ์์น ๊ธฐ์ค์ผ๋ก ์์ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋๋ค
ํธ์ถ ์์น์ ๊ด๊ณ์์ด ์ ์๋ ์์น์ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x); // 1
}
foo();
์ ์ธํ์ง ์์ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ฉด ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋๋ค
๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์์ผ๋ฉฐ, delete๋ก ์ญ์ ๊ฐ๋ฅ
function foo() {
y = 20; // ์๋ฌต์ ์ ์ญ
}
์ ์ญ ๊ฐ์ฒด ํ๋(MYAPP ๋ฑ) ๋ฅผ ๋ง๋ค์ด ๋ชจ๋ ์ ์ญ ๋ณ์๋ฅผ ๊ทธ ์์ ๊ด๋ฆฌ
var MYAPP = {
student: {
name: 'Lee',
gender: 'male'
}
};
IIFE(Immediately-Invoked Function Expression)๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ญ ์ค์ฝํ๋ฅผ ์์ฑํ๊ณ ์ ์ญ ์ค์ผ ๋ฐฉ์งํ๋ค
(function() {
var MYAPP = { student: { name: 'Lee' } };
})();