- ์น ๋ธ๋ผ์ฐ์ ์ ์ญํ
- URL์ ํตํด Web(WWW)์ ํ์ํจ
- HTML / CSS / JavaScript ๋ฅผ ์ดํดํ ๋ค ํด์ํด์ ์ฌ์ฉ์์๊ฒ ํ๋์ ํ๋ฉด์ผ๋ก ๋ณด์ฌ์ค
- ์น ์๋น์ค ์ด์ฉ ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ํจ
- ์ฆ, ์น ํ์ด์ง ์ฝ๋๋ฅผ ์ดํดํ๊ณ , ๋ณด์ฌ์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์ด ์น ๋ธ๋ผ์ฐ์
- ์น ๋ธ๋ผ์ฐ์ ๋ JavaScript๋ฅผ ํด์ํ๋ ์์ง์ ๊ฐ์ง๊ณ ์์
- ํ์ฌ์ JavaScript๋ ์ด์ ์์ฅ์์ ์๋ฆฌ๋ฅผ ์ก์ ์ธ์ด์ด๋ฉฐ, ๊ฐ๋ฐ์์ ํฐ ์ถ์ ๋ด๋นํจ
- ํนํ Chrome V8์ ๊ฒฝ์ฐ JavaScript๋ฅผ ๋ฒ์ญํ๋ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ
- node.js, react.js, electron ๋ฑ์ ๋ด๋ถ ์์ง์ผ๋ก ์ฌ์ฉ๋จ
- ๊ทธ ๊ฒฐ๊ณผ BE, mobile, desktop app ๋ฑ์ ๋ชจ๋ JavaScript๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅํด์ง
-
์ธ๋ฏธ์ฝ๋ก (semicolon)
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ๋ฏธ์ฝ๋ก ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ์ธ๋ฏธ์ฝ๋ก ์ด ์์ผ๋ฉด ASI์ ์ํด ์๋์ผ๋ก ์ธ๋ฏธ์ฝ๋ก ์ด ์ฝ์
๋จ
- ASI ( Automatic Semicolon Insertion, ์๋ ์ธ๋ฏธ์ฝ๋ก ์ฝ์ ๊ท์น)
console.log('hello'); console.log('javascript')
-
๋ค์ฌ์ฐ๊ธฐ์ ์ฝ๋ ๋ธ๋ญ
- JavaScript๋ 2์นธ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉ
- **๋ธ๋ญ(block)**์ if, for, ํจ์์์ ์ค๊ดํธ { } ๋ด๋ถ๋ฅผ ๋งํจ
- JavaScript๋ ์ค๊ดํธ { }๋ฅผ ์ฌ์ฉํด ์ฝ๋ ๋ธ๋ญ์ ๊ตฌ๋ถ
if (isClean) { // ์ค๊ดํธ๋ฅผ ์ฌ์ฉํด์ ์ฝ๋ ๋ธ๋ญ ๊ตฌ๋ถ console.log('clean!') // 2์นธ ๋ค์ฌ์ฐ๊ธฐ }
-
์ฃผ์
- // : ํ ์ค ์ฃผ์
- /* */ : ์ฌ๋ฌ ์ค ์ฃผ์
// console.log('ํ๋ฉด์ ํ์๋์ง ์์') /* ์ฌ๋ฌ ์ค ์ฃผ์์ ์ด๋ ๊ฒ ์ฌ์ฉํฉ๋๋ค. */
- ๋ณ์์ ์๋ณ์
- ์๋ณ์(identifier)๋ ๋ณ์๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ๋ณ์๋ช ์ ๋งํจ
- ์๋ณ์๋ ๋ฐ๋์
๋ฌธ์, $, _
๋ก ์์ - ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ฉฐ, ํด๋์ค๋ช ์ธ์๋ ๋ชจ๋ ์๋ฌธ์๋ก ์์
- ์์ฝ์ด ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
- ์์ฝ์ด ์์ : for, if, function ๋ฑ
-
์๋ณ์ ์ ์์ ํน์ง
-
์นด๋ฉ ์ผ์ด์ค (camelCase, lower-camel-case)
- ๋ณ์, ๊ฐ์ฒด, ํจ์์ ์ฌ์ฉ
// ๋ณ์ let dog let variableName // ๊ฐ์ฒด const userInfo = { name: 'Tom', age: 20 } // ํจ์ function add() {} function getName() {}
-
ํ์ค์นผ ์ผ์ด์ค (PascalCase, upper-camel-case)
- ํด๋์ค, ์์ฑ์์ ์ฌ์ฉ
// ํด๋์ค class User { constructor(options) { this.name = options.name } } // ์์ฑ์ ํจ์ function User(options) { this.name = options.name }
-
๋๋ฌธ์ ์ค๋ค์ดํฌ ์ผ์ด์ค (SNAKE_CASE)
- ์์ (constants)์ ์ฌ์ฉ
- ์์ : ๊ฐ๋ฐ์์ ์๋์ ์๊ด์์ด ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฐ์ ์๋ฏธ
// ๊ฐ์ด ๋ฐ๋์ง ์์ ์์ const API_KEY = 'my-key' const PI = Math.PI // ์ฌํ ๋น์ด ์ผ์ด๋์ง ์๋ ๋ณ์ const NUMBERS = [1, 2, 3]
-
-
๋ณ์ ์ ์ธ ํค์๋
-
let
- ๋ธ๋ก ์ค์ฝํ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธ
- ์ถ๊ฐ๋ก ๋์์ ๊ฐ์ ์ด๊ธฐํ
- ๋ธ๋ก ์ค์ฝํ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธ
-
const
- ๋ธ๋ก ์ค์ฝํ ์ฝ๊ธฐ ์ ์ฉ ์์๋ฅผ ์ ์ธ
- ์ถ๊ฐ๋ก ๋์์ ๊ฐ์ ์ด๊ธฐํ
- ๋ธ๋ก ์ค์ฝํ ์ฝ๊ธฐ ์ ์ฉ ์์๋ฅผ ์ ์ธ
-
var
- ๋ณ์๋ฅผ ์ ์ธ
- ์ถ๊ฐ๋ก ๋์์ ๊ฐ์ ์ด๊ธฐํ
- ๋ณ์๋ฅผ ์ ์ธ
-
์ฐธ๊ณ ) ์ ์ธ, ํ ๋น, ์ด๊ธฐํ
- ์ ์ธ (Declaration)
- ๋ณ์๋ฅผ ์์ฑํ๋ ํ์ ๋๋ ์์
- ํ ๋น (Assignment)
- ์ ์ธ๋ ๋ณ์์ ๊ฐ์ ์ ์ฅํ๋ ํ์ ๋๋ ์์
- ์ด๊ธฐํ (Initialization)
- ์ ์ธ๋ ๋ณ์์ ์ฒ์์ผ๋ก ๊ฐ์ ์ ์ฅํ๋ ํ์ ๋๋ ์์
let foo // ์ ์ธ console.log(foo) // undefined foo = 11 // ํ ๋น console.log(foo) // 11 let bar = 0 // ์ ์ธ + ํ ๋น console.log(bar) // 0
- ์ ์ธ (Declaration)
-
์ฐธ๊ณ ) ๋ธ๋ก ์ค์ฝํ(block scope)
- if, for, ํจ์ ๋ฑ์ ์ค๊ดํธ { } ๋ด๋ถ๋ฅผ ๊ฐ๋ฆฌํด
- ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ ๋ณ์๋ ๋ธ๋ก ๋ฐ๊นฅ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
let x = 1; if (x === 1) { let x = 2 console.log(x) // 2 } console.log(x) // 1
-
-
๋ณ์ ์ ์ธ ํค์๋ - let
-
let
- ์ฌํ ๋น ๊ฐ๋ฅ & ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ
let number = 10 // 1. ์ ์ธ ๋ฐ ์ด๊ธฐ๊ฐ ํ ๋น number = 20 // 2. ์ฌํ ๋น
let number = 10 // 1. ์ ์ธ ๋ฐ ์ด๊ธฐ๊ฐ ํ ๋น let number = 20 // 2. ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ
- ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธ, ์ ์ธ๊ณผ ๋์์ ์ํ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ ํ ์ ์์
-
-
๋ณ์ ์ ์ ํค์๋ - const
-
const
- ์ฌํ ๋น ๋ถ๊ฐ๋ฅ & ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ
const number = 10 // 1. ์ ์ธ ๋ฐ ์ด๊ธฐ๊ฐ ํ ๋น number = 20 // 2. ์ฌํ ๋น ๋ถ๊ฐ๋ฅ
const number = 10 // 1. ์ ์ธ ๋ฐ ์ด๊ธฐ๊ฐ ํ ๋น const number = 20 // 2. ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ
- ์ ์ธ ์ ๋ฐ๋์ ์ด๊ธฐ๊ฐ์ ์ค์ ํด์ผ ํ๋ฉฐ, ์ดํ ๊ฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅ
- let ๊ณผ ๋์ผํ๊ฒ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง
-
-
๋ณ์ ์ ์ธ ํค์๋ - var
-
var
-
์ฌํ ๋น ๊ฐ๋ฅ & ์ฌ์ ์ธ ๊ฐ๋ฅ
-
ES6 ์ด์ ์ ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉ๋๋ ํค์๋
-
ํธ์ด์คํ
๋๋ ํน์ฑ์ผ๋ก ์ธํด ์๊ธฐ์น ๋ชปํ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ- ES6 ์ดํ๋ถํฐ๋ var ๋์ const ์ let ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ
-
ํจ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง
- ํจ์์ ์ค๊ดํธ ๋ด๋ถ๋ฅผ ๊ฐ๋ฆฌํด
- ํจ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ ๋ณ์๋ ํจ์ ๋ฐ๊นฅ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
function foo() { var x = 5 console.log(x) // 5 } // ReferenceError : x is not defined console.log(x)
-
๋ณ์ ์ ์ธ ์ var, const, let ํค์๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๋์ผ๋ก var๋ก ์ ์ธ๋จ
-
-
์ฐธ๊ณ ) ํธ์ด์คํ ( hoisting )
- ๋ณ์๋ฅผ ์ ์ธ ์ด์ ์ ์ฐธ์กฐํ ์ ์๋ ํ์
- var๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์ธ ์ด์ ์ ์ฐธ์กฐํ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ํ์์ ํธ์ด์คํ ์ด๋ผ ํจ
- ๋ณ์ ์ ์ธ ์ด์ ์ ์์น์์ ์ ๊ทผ ์ undefined๋ฅผ ๋ฐํ
console.log(name) // undefined => ์ ์ธ ์ด์ ์ ์ฐธ์กฐ var name = 'ํ๊ธธ๋' // ์ ์ธ
// ์ ์ฝ๋๋ฅผ ์๋ฌต์ ์ผ๋ก ์๋์ ๊ฐ์ด ์ดํดํจ var name // undefined๋ก ์ด๊ธฐํ console.log(name) var name = 'ํ๊ธธ๋'
- JavaScript์์ ๋ณ์๋ค์ ์ค์ ์คํ ์์ ์ฝ๋์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๊ฒ ๋๋ฉฐ (hoisted) ์ด๋ฌํ ์ด์ ๋๋ฌธ์ var๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์ธ ์์ undefined๋ก ๊ฐ์ด ์ด๊ธฐํ๋๋ ๊ณผ์ ์ด ๋์์ ์ผ์ด๋จ
- ๋ฐ๋ฉด let, const๋ ํธ์ด์คํ ์ด ์ผ์ด๋๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํด
- ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ ์ฝ๋์ ๋
ผ๋ฆฌ์ ์ธ ํ๋ฆ์ ๊นจ๋จ๋ฆฌ๋ ํ์์ด๋ฉฐ ์ด๋ฌํ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด let, const๊ฐ ์ถ๊ฐ๋์์
- ์ฆ,
var๋ ์ฌ์ฉํ์ง ์์์ผ ํ๋ ํค์๋
- ์ฆ,
-
-
๋ณ์ ์ ์ธ ํค์๋ ์ ๋ฆฌ
ํค์๋ ์ฌ์ ์ธ ์ฌํ ๋น ์ค์ฝํ ๋น๊ณ let X O ๋ธ๋ก ์ค์ฝํ ES6๋ถํฐ ๋์ const X X ๋ธ๋ก ์ค์ฝํ ES6๋ถํฐ ๋์ var O O ํจ์ ์ค์ฝํ ์ฌ์ฉ X
-
๋ฐ์ดํฐ ํ์
- JavaScript์ ๋ชจ๋ ๊ฐ์ ํน์ ํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง
- ํฌ๊ฒ **์์ ํ์ (Primitive type)**๊ณผ **์ฐธ์กฐ ํ์ (Reference type)**์ผ๋ก ๋ถ๋ฅ๋จ
-
Number
- ์ ์ ๋๋ ์ค์ํ ์ซ์๋ฅผ ํํํ๋ ์๋ฃํ
const a = 13 const b = -5 const c = 3.14 // float - ์ซ์ ํํ const d = 2.998e8 // 2.998 * 10^8 = 299,800,000 const e = Infinity const f = -Infinity const g = NaN // Not a Number ์ ๋ํ๋ด๋ ๊ฐ
-
NaN
-
Not-A-Number(์ซ์๊ฐ ์๋)๋ฅผ ๋ํ๋
-
Number.isNaN()
์ ๊ฒฝ์ฐ ์ฃผ์ด์ง ๊ฐ์ ์ ํ์ด Number์ด๊ณ- ๊ฐ์ด NaN์ด๋ฉด true
- ์๋๋ฉด false
๋ฐํ
console.log(Number.isNaN(NaN)) // true console.log(Number.isNaN(0 / 0)) // true console.log('#####################'); // isNaN() ์ผ๋ก๋ True => Number ์ด๋ฉด์ NaN ์ธ์ง ์๋์ง ํ๋ณ console.log(Number.isNaN('NaN')) // false console.log(Number.isNaN(undefined)) // false console.log(Number.isNaN({})) // false console.log(Number.isNaN('blabla')) // false console.log('#####################'); // isNaN() ์ผ๋ก๋ ํด๋ณด๊ธฐ => NaN ์ธ์ง ์๋์ง ํ๋ณ console.log(isNaN('NaN')) // true console.log(isNaN(undefined)) // true console.log(isNaN({})) // true console.log(isNaN('blabla')) // true console.log('#####################'); // ์ด๋ค ๋ชจ๋ false console.log(Number.isNaN(true)) console.log(Number.isNaN(null)) console.log(Number.isNaN(37)) console.log(Number.isNaN('37')) console.log(Number.isNaN('37.37')) console.log(Number.isNaN('')) console.log(Number.isNaN(' '))
- NaN์ ๋ฐํํ๋ ๊ฒฝ์ฐ
- ์ซ์๋ก์ ์ฝ์ ์ ์์
- parseInt(โ์ด์ฉ๊ตฌโ), Number(undefined)
- ๊ฒฐ๊ณผ๊ฐ ํ์์ธ ์ํ ๊ณ์ฐ์
- Math.sqrt(-1)
- ํผ์ฐ์ฐ์๊ฐ NaN
- 7 * NaN
- ์ ์ํ ์ ์๋ ๊ณ์ฐ์
- 0 * Infinity
- ๋ฌธ์์ด์ ํฌํจํ๋ฉด์ ๋ง์
์ด ์๋ ๊ณ์ฐ์
- โ๊ฐโ / 3
- ์ซ์๋ก์ ์ฝ์ ์ ์์
-
-
String
-
๋ฌธ์์ด์ ํํํ๋ ์๋ฃํ
-
์์ ๋ฐ์ดํ ๋๋ ํฐ ๋ฐ์ดํ ๋ชจ๋ ๊ฐ๋ฅ
-
๊ณฑ์ , ๋๋์ , ๋บ์ ์ ์๋์ง๋ง ๋ง์ ์ ํตํด ๋ฌธ์์ด ๋ถ์ผ ์ ์์
-
Quote๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ธ ์ ์ค ๋ฐ๊ฟ์ด ์๋จ
-
๋์ escape sequence๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ \n๋ฅผ ์ฌ์ฉํด์ผ ํจ
// Bad const word = "์๋ ํ์ธ์" // Uncaught SyntaxError : Invalid or unexpected token // Good const word1 = "์๋ \\n ํ์ธ์" console.log(word1)
-
Template Literal์ ์ฌ์ฉํ๋ฉด ์ค ๋ฐ๊ฟ์ด ๋๋ฉฐ, ๋ฌธ์์ด ์ฌ์ด์ ๋ณ์๋ ์ฝ์ ๊ฐ๋ฅ
-
๋จ, escape sequence๋ฅผ ์ฌ์ฉํ ์ ์๋ค
=== Python์ โf-stringโ
const word2 = `์๋ ๋ค ํ์ธ์` console.log(word2) const age = 10 const message = `ํ๊ธธ๋์ ${age}์ธ์ ๋๋ค.` console.log(message)
-
Template literals (ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด)
-
๋ด์ฅ๋ ํํ์์ ํ์ฉํ๋ ๋ฌธ์์ด ์์ฑ ๋ฐฉ์
-
Backtick(``)์ ์ด์ฉํ๋ฉฐ, ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๋ฌธ์์ด์ ์ ์ํ ์๋ ์๊ณ JavaScript์ ๋ณ์๋ฅผ ๋ฌธ์์ด ์์ ๋ฐ๋ก ์ฐ๊ฒฐํ ์ ์๋ ์ด์ ์ด ์๊น
-
ํํ์์ ๋ฃ์ ์ ์๋๋ฐ, ์ด๋ $์ ์ค๊ดํธ๋ก ํ๊ธฐ
const age = 10 const message = `ํ๊ธธ๋์ ${age}์ธ์ ๋๋ค.`
-
-
-
-
Empty Value
- ๊ฐ์ด ์กด์ฌํ์ง ์์์ ํํํ๋ ๊ฐ์ผ๋ก JavaScript์์๋
null
๊ณผundefined
๊ฐ ์กด์ฌ - ๋์ผํ ์ญํ ์ ํ๋ ์ด 2๊ฐ์ ํค์๋๊ฐ ์กด์ฌํ๋ ์ด์ ๋ ๋จ์ํ JavaScript์ ์ค๊ณ ์ค์
- ํฐ ์ฐจ์ด๋ฅผ ๋์ง ๋ง๊ณ interchangeable ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ถ์ฅํจ
-
null
-
null ๊ฐ์ ๋ํ๋ด๋ ํน๋ณํ ํค์๋
-
๋ณ์์ ๊ฐ์ด ์์์ ์๋์ ์ผ๋ก ํํํ ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํ์
let lastName = null console.log(lastName) // null
-
-
undefined
-
๊ฐ์ด ์ ์๋์ด ์์ง ์์์ ํํํ๋ ๊ฐ
-
๋ณ์ ์ ์ธ ์ดํ ์ง์ ๊ฐ์ ํ ๋นํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ํ ๋น๋จ
let firstName // ์ ์ธ๋ง ํ๊ณ ํ ๋นํ์ง ์์ console.log(firstName) // undefined
-
-
null๊ณผ undefined
-
null๊ณผ undefined์ ๊ฐ์ฅ ๋ํ์ ์ธ ์ฐจ์ด์ ์
typeof
์ฐ์ฐ์๋ฅผ ํตํด ํ์ ์ ํ์ธํ์ ๋ ๋ํ๋จtypeof null // "object" typeof undefined // "undefined"
-
null์ด ์์ ํ์ ์์๋ ๋ถ๊ตฌํ๊ณ object๋ก ์ถ๋ ฅ๋๋ ์ด์ ๋ JavaScript ์ค๊ณ ๋น์์ ๋ฒ๊ทธ๋ฅผ ์ง๊ธ๊น์ง ํด๊ฒฐํ์ง ๋ชปํ ๊ฒ
-
์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ์ด์ ๋ ์ด๋ฏธ null ํ์ ์ ์์กด์ฑ์ ๋๊ณ ์๋ ๋ง์ ํ๋ก๊ทธ๋จ๋ค์ด ๋ง๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ ( ํ์ ํธํ ์ ์ง )
-
- ๊ฐ์ด ์กด์ฌํ์ง ์์์ ํํํ๋ ๊ฐ์ผ๋ก JavaScript์์๋
-
Boolean
-
true์ false
-
์ฐธ๊ณผ ๊ฑฐ์ง์ ํํํ๋ ๊ฐ
-
์กฐ๊ฑด๋ฌธ ๋๋ ๋ฐ๋ณต๋ฌธ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ
-
์กฐ๊ฑด๋ฌธ ๋๋ ๋ฐ๋ณต๋ฌธ์์ boolean์ด ์๋ ๋ฐ์ดํฐ ํ์ ์
์๋ ํ๋ณํ ๊ท์น
์ ๋ฐ๋ผ true ๋๋ false๋ก ๋ณํ๋จ-
์๋ ํ๋ณํ ๊ท์น
๋ฐ์ดํฐ ํ์ false true undefined ํญ์ false X null ํญ์ false X Number 0, -0, NaN ๋๋จธ์ง ๋ชจ๋ ๊ฒฝ์ฐ String ๋น ๋ฌธ์์ด ๋๋จธ์ง ๋ชจ๋ ๊ฒฝ์ฐ Object X ํญ์ true
-
-
-
-
์ฐ์ฐ์
-
ํ ๋น ์ฐ์ฐ์
- ์ค๋ฅธ์ชฝ์ ์๋ ํผ์ฐ์ฐ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ผ์ชฝ ํผ์ฐ์ฐ์์ ํ ๋นํ๋ ์ฐ์ฐ์
- ๋ค์ํ ์ฐ์ฐ์ ๋ํ ๋จ์ถ ์ฐ์ฐ์ ์ง์
- Increment ๋ฐ Decrement ์ฐ์ฐ์
- Increment(++) : ํผ์ฐ์ฐ์์ ๊ฐ์ 1 ์ฆ๊ฐ์ํค๋ ์ฐ์ฐ์
- Decrement(- -) : ํผ์ฐ์ฐ์์ ๊ฐ์ 1 ๊ฐ์์ํค๋ ์ฐ์ฐ์
- += ๋๋ -= ์ ๊ฐ์ด ๋ ๋ถ๋ช ํ ํํ์ ๊ถ์ฅํจ
-
๋น๊ต ์ฐ์ฐ์
-
ํผ์ฐ์ฐ์๋ค(์ซ์, ๋ฌธ์, Boolean ๋ฑ)์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ boolean์ผ๋ก ๋ฐํํ๋ ์ฐ์ฐ์
-
๋ฌธ์์ด์ ์ ๋์ฝ๋ ๊ฐ์ ์ฌ์ฉํ๋ฉฐ ํ์ค ์ฌ์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๊ต
-
์ํ๋ฒณ๋ผ๋ฆฌ ๋น๊ตํ ๊ฒฝ์ฐ
- ์ํ๋ฒณ ์์์ ํ์์๊ฐ ๋ ํฌ๋ค
- ์๋ฌธ์๊ฐ ๋๋ฌธ์๋ณด๋ค ๋ ํฌ๋ค
3 > 2 // true 3 < 2 // false 'A' < 'B' // true 'Z' < 'a' // true '๊ฐ' < '๋' // true
-
-
-
๋๋ฑ ์ฐ์ฐ์(==)
- ๋ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋์ง ๋น๊ต ํ boolean ๊ฐ์ ๋ฐํ
- ๋น๊ตํ ๋
์๋ฌต์ ํ์ ๋ณํ
์ ํตํด ํ์ ์ ์ผ์น์ํจ ํ ๊ฐ์ ๊ฐ์ธ์ง ๋น๊ต - ๋ ํผ์ฐ์ฐ์๊ฐ ๋ชจ๋ ๊ฐ์ฒด์ผ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๋์ง ํ๋ณ
- ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ์ง ์์
-
์ผ์น ์ฐ์ฐ์(===)
- ๋ ํผ์ฐ์ฐ์์ ๊ฐ๊ณผ ํ์ ์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํ
- ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฑฐ๋, ๊ฐ์ ํ์ ์ด๋ฉด์ ๊ฐ์ ๊ฐ์ธ์ง๋ฅผ ๋น๊ต
- ์๊ฒฉํ ๋น๊ต๊ฐ ์ด๋ค์ง๋ฉฐ
์๋ฌต์ ํ์ ๋ณํ์ด ๋ฐ์ํ์ง ์์
- ์๊ฒฉํ ๋น๊ต - ๋ ๋น๊ต ๋์์ ํ์ ๊ณผ ๊ฐ ๋ชจ๋ ๊ฐ์์ง ๋น๊ตํ๋ ๋ฐฉ์
-
๋ ผ๋ฆฌ ์ฐ์ฐ์
- ์ธ ๊ฐ์ง ๋
ผ๋ฆฌ ์ฐ์ฐ์๋ก ๊ตฌ์ฑ
- and ์ฐ์ฐ : &&
- or ์ฐ์ฐ : ||
- not ์ฐ์ฐ : !
- ๋จ์ถ ํ๊ฐ ์ง์
- ex) false && true โ false
- ex) true || false โ true
- ์ธ ๊ฐ์ง ๋
ผ๋ฆฌ ์ฐ์ฐ์๋ก ๊ตฌ์ฑ
-
์ผํญ ์ฐ์ฐ์
- 3๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ ๋ฐํํ๋ ์ฐ์ฐ์
- ๊ฐ์ฅ ์์ ์กฐ๊ฑด์์ด ์ฐธ์ด๋ฉด :(์ฝ๋ก ) ์์ ๊ฐ์ด ๋ฐํ๋๋ฉฐ, ๊ทธ ๋ฐ๋์ผ ๊ฒฝ์ฐ : ๋ค์ ๊ฐ์ด ๋ฐํ๋๋ ์ฐ์ฐ์
- ์ผํญ ์ฐ์ฐ์์ ๊ฒฐ๊ณผ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ณ์์ ํ ๋น ๊ฐ๋ฅ
true? 1:2 // 1 false: 1:2 // 2 const result = Math.PI > 4 ? 'Yep' : 'Nope' console.log(result) // Nope
-
- ์กฐ๊ฑด๋ฌธ
- ์กฐ๊ฑด๋ฌธ์ ์ข
๋ฅ์ ํน์ง
- if
- ์กฐ๊ฑด ํํ์์ ๊ฒฐ๊ณผ๊ฐ์
boolean ํ์ ์ผ๋ก ๋ณํ ํ ์ฐธ/๊ฑฐ์ง์ ํ๋จ
- ์กฐ๊ฑด ํํ์์ ๊ฒฐ๊ณผ๊ฐ์
- switch
- ์กฐ๊ฑด ํํ์์ ๊ฒฐ๊ณผ๊ฐ์ด
์ด๋ ๊ฐ(case)์ ํด๋นํ๋์ง ํ๋ณ
- ์ฃผ๋ก ํน์ ๋ณ์์ ๊ฐ์ ๋ฐ๋ผ ์กฐ๊ฑด์ ๋ถ๊ธฐํ ๋ ํ์ฉ
- ์กฐ๊ฑด์ด ๋ง์์ง ๊ฒฝ์ฐ if ๋ฌธ๋ณด๋ค ๊ฐ๋ ์ฑ์ด ๋์ ์ ์์
- ์กฐ๊ฑด ํํ์์ ๊ฒฐ๊ณผ๊ฐ์ด
- if
- ์กฐ๊ฑด๋ฌธ์ ์ข
๋ฅ์ ํน์ง
-
if statement
-
if, else if, else
- ์กฐ๊ฑด์ ์๊ดํธ ์์ ์์ฑ
- ์คํํ ์ฝ๋๋ ์ค๊ดํธ ์์ ์์ฑ
- ๋ธ๋ก ์ค์ฝํ ์์ฑ
const name = 'manager' if (name === 'admin') { console.log('๊ด๋ฆฌ์๋ ํ์ํฉ๋๋ค.') } else if (name === 'manager') { console.log('๋งค๋์ ๋ ํ์ํฉ๋๋ค.') } else { console.log(`${name}๋ ํ์ํฉ๋๋ค.`) }
-
-
switch statement
- ํํ์์ ๊ฒฐ๊ณผ๊ฐ์ ์ด์ฉํ ์กฐ๊ฑด๋ฌธ
- ํํ์์ ๊ฒฐ๊ณผ๊ฐ๊ณผ case ๋ฌธ์ ์ค๋ฅธ์ชฝ ๊ฐ์ ๋น๊ต
- break ๋ฐ default ๋ฌธ์ [์ ํ์ ]์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- break ๋ฌธ์ด ์๋ ๊ฒฝ์ฐ break ๋ฌธ์ ๋ง๋๊ฑฐ๋ default ๋ฌธ์ ์คํํ ๋๊น์ง ๋ค์ ์กฐ๊ฑด๋ฌธ ์คํ
- ๋ธ๋ก ์ค์ฝํ ์์ฑ
switch(expression) { case 'first value': { // do something [break] } case 'second value': { //do something [break] } [default: { //do something }] }
-
์ด ๊ฒฝ์ฐ ๋ชจ๋ console์ด ์ถ๋ ฅ๋จ (Fall-through ํ์)
const name = 'ํ๊ธธ๋' switch(name) { case 'ํ๊ธธ๋': { console.log('๊ด๋ฆฌ์๋ ํ์ํฉ๋๋ค.') } case 'manager': { console.log('๋งค๋์ ๋ ํ์ํฉ๋๋ค.') default: { console.log(`${name}๋ ํ์ํฉ๋๋ค.`) } } // ์ถ๋ ฅ ๊ฒฐ๊ณผ ๊ด๋ฆฌ์๋ ํ์ํฉ๋๋ค. ๋งค๋์ ๋ ํ์ํฉ๋๋ค. ํ๊ธธ๋๋ ํ์ํฉ๋๋ค.
- break๋ฅผ ์์ฑํ๋ฉด ์๋ํ ๋๋ก ๋์
const name = 'ํ๊ธธ๋' switch(name) { case 'ํ๊ธธ๋': { console.log('๊ด๋ฆฌ์๋ ํ์ํฉ๋๋ค.') break } case 'manager': { console.log('๋งค๋์ ๋ ํ์ํฉ๋๋ค.') break default: { console.log(`${name}๋ ํ์ํฉ๋๋ค.`) } } // ์ถ๋ ฅ ๊ฒฐ๊ณผ ๊ด๋ฆฌ์๋ ํ์ํฉ๋๋ค.
-
if / switch
- ์กฐ๊ฑด์ด ๋ง์ ๊ฒฝ์ฐ switch๋ฌธ์ ํตํด ๊ฐ๋ ์ฑ ํฅ์์ ๊ธฐ๋ํ ์ ์์
- ์ผ๋ฐ์ ์ผ๋ก ์ค์ฒฉ else if ๋ฌธ์ ์ ์ง๋ณด์ํ๊ธฐ ํ๋ค๋ค๋ ๋ฌธ์ ๊ฐ ์์
-
๋ฐ๋ณต๋ฌธ
-
์ข ๋ฅ
- while
- for
- for โฆ in
- for โฆ of
-
while
-
์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ด๊ธฐ๋ง ํ๋ฉด ๋ฌธ์ฅ์ ๊ณ์ํด์ ์ํ
while (์กฐ๊ฑด๋ฌธ) { // do something }
์์)
let i = 0 while (i < 6) { console.log(i) i += 1 } // 0, 1, 2, 3, 4, 5
-
-
for
-
ํน์ ํ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ๋ก ํ๋ณ๋ ๋๊น์ง ๋ฐ๋ณต
for ( [์ด๊ธฐ๋ฌธ]; [์กฐ๊ฑด๋ฌธ]; [์ฆ๊ฐ๋ฌธ]) { console.log(i) } // 0, 1, 2, 3, 4, 5
-
-
for โฆ in
- ๊ฐ์ฒด (object) ์ ์์ฑ์ ์ํํ ๋ ์ฌ์ฉ
- ๋ฐฐ์ด๋ ์ํ ๊ฐ๋ฅํ์ง๋ง ์ธ๋ฑ์ค ์์ผ๋ก ์ํํ๋ค๋ ๋ณด์ฅ์ด ์์ผ๋ฏ๋ก ๊ถ์ฅํ์ง ์์
for (variable in object) { statements }
์์)
const fruits = { a: 'apple', b: 'banana' } for (const key in fruits) { console.log(key) // a, b console.log(fruits[key]) // apple, banana }
-
for โฆ of
- ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์ํํ ๋ ์ฌ์ฉ
- ๋ฐ๋ณต ๊ฐ๋ฅํ (iterable) ๊ฐ์ฒด์ ์ข
๋ฅ :
Array, Set, String
๋ฑ ( Object๋ TypeError )
for (variable of object) { statements }
์์)
const numbers = [0, 1, 2, 3] for (const number of numbers) { console.log(number) // 0, 1, 2, 3 }
-
for โฆ in ๊ณผ for โฆ of ์ ์ฐจ์ด
- for โฆ in ์
์์ฑ ์ด๋ฆ
์ ํตํด ๋ฐ๋ณต - for โฆ of ๋
์์ฑ ๊ฐ
์ ํตํด ๋ฐ๋ณต
const arr = [3, 5, 7] for (const i in arr) { console.log(i) // 0 1 2 } for (const i of arr) { console.log(i) // 3 5 7 }
-
for โฆ in ์ ๊ฐ์ฒด ์ํ ์ ํฉ
// Array const numbers = [10, 20, 30] for (const number in numbers) { console.log(number) // 0 1 2 } // Object const capitals = { korea: '์์ธ', france: 'ํ๋ฆฌ', japan: '๋์ฟ' } for (const capital in capitals) { console.log(capital) // korea france japan }
-
for โฆ of ๋ Iterable ์ํ ์ ํฉ
// Array const numbers = [10, 20, 30] for (const number in numbers) { console.log(number) // 10 20 30 } // Object const capitals = { korea: '์์ธ', france: 'ํ๋ฆฌ', japan: '๋์ฟ' } for (const capital in capitals) { console.log(capital) // TypeError : capitals is not iterable }
-
์ฐธ๊ณ ) for โฆ in, for โฆ of ์ const
- for ๋ฌธ
- for ( let i = 0; i < arr.length; i++ ) { โฆ } ์ ๊ฒฝ์ฐ ์ต์ด ์ ์ํ i ๋ฅผ ์ฌํ ๋นํ๋ฉด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ const๋ฅผ ์ฌ์ฉํ๋ฉด
์๋ฌ ๋ฐ์
- for ( let i = 0; i < arr.length; i++ ) { โฆ } ์ ๊ฒฝ์ฐ ์ต์ด ์ ์ํ i ๋ฅผ ์ฌํ ๋นํ๋ฉด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ const๋ฅผ ์ฌ์ฉํ๋ฉด
- for โฆ in, for โฆ of
- ์ฌํ ๋น์ด ์๋๋ผ, ๋งค ๋ฐ๋ณต ์ ํด๋น ๋ณ์๋ฅผ ์๋ก ์ ์ํ์ฌ ์ฌ์ฉํ๋ฏ๋ก
์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์
- ์ฌํ ๋น์ด ์๋๋ผ, ๋งค ๋ฐ๋ณต ์ ํด๋น ๋ณ์๋ฅผ ์๋ก ์ ์ํ์ฌ ์ฌ์ฉํ๋ฏ๋ก
- for ๋ฌธ
- for โฆ in ์
-
์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ ์ ๋ฆฌ
ํค์๋ ์ข ๋ฅ ์ฐ๊ด ํค์๋ ์ค์ฝํ if ์กฐ๊ฑด๋ฌธ - ๋ธ๋ก ์ค์ฝํ switch ์กฐ๊ฑด๋ฌธ case, break, default ๋ธ๋ก ์ค์ฝํ while ๋ฐ๋ณต๋ฌธ break, continue ๋ธ๋ก ์ค์ฝํ for ๋ฐ๋ณต๋ฌธ break, continue ๋ธ๋ก ์ค์ฝํ for โฆ in ๋ฐ๋ณต๋ฌธ ๊ฐ์ฒด ์ํ ๋ธ๋ก ์ค์ฝํ for โฆ of ๋ฐ๋ณต๋ฌธ Iterable ์ํ ๋ธ๋ก ์ค์ฝํ
-
- ์ฐธ์กฐ ํ์ ์ค ํ๋๋ก์จ function ํ์ ์ ์ํจ
- JavaScript์์ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ฃผ๋ก 2๊ฐ์ง๋ก ๊ตฌ๋ถ๋จ
ํจ์ ์ ์ธ์ (function declaration)
ํจ์ ํํ์ (function expression)
-
ํจ์ ์ ์ธ์ (function declaration)
-
์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ์ ์ ์ ๋ฐฉ์
function ํจ์๋ช () { // do something }
-
์์)
function add(num1, num2) { return num1 + num2 } add(2, 7) // 9
-
-
-
ํจ์ ํํ์ (function expression)
-
ํํ์ ๋ด์์ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ์
-
ํจ์ ํํ์์ ํจ์์ ์ด๋ฆ์ ์๋ตํ ์ต๋ช ํจ์๋ก ์ ์ ๊ฐ๋ฅ
๋ณ์ํค์๋ ํจ์๋ช = function () { // do something }
-
์์)
const sub = function (num1, num2) { return num1 - num2 } sub(7, 2) // 5
-
-
ํํ์์์ ํจ์ ์ด๋ฆ์ ๋ช ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅ
- ๋ค๋ง ์ด ๊ฒฝ์ฐ ํจ์ ์ด๋ฆ์ ํธ์ถ์ ์ฌ์ฉ๋์ง ๋ชปํ๊ณ ๋๋ฒ๊น ์ฉ๋๋ก ์ฌ์ฉ๋จ
const mySub = function namedSub(num1, num2) { return num1 - num2 } mySub(1, 2) // -1 namedSub(1, 2) // ReferenceError : namedSub is not defined
-
-
๊ธฐ๋ณธ ์ธ์ (Default arguments)
- ์ธ์ ์์ฑ ์ โ=โ ๋ฌธ์ ๋ค ๊ธฐ๋ณธ ์ธ์ ์ ์ธ ๊ฐ๋ฅ
const greetig = function (name = 'Anonymous') { return `Hi ${name}` } greeting() // Hi Anonymous
-
๋งค๊ฐ๋ณ์์ ์ธ์์ ๊ฐ์ ๋ถ์ผ์น ํ์ฉ
-
๋งค๊ฐ๋ณ์๋ณด๋ค ์ธ์์ ๊ฐ์๊ฐ ๋ง์ ๊ฒฝ์ฐ
const noArgs = function () { return 0 } noArgs(1, 2, 3) // 0 const twoArgs = function (arg1, arg2) { return [arg1, arg2] } twoArgs(1, 2, 3) // [1, 2]
-
๋งค๊ฐ๋ณ์๋ณด๋ค ์ธ์์ ๊ฐ์๊ฐ ์ ์ ๊ฒฝ์ฐ
const threeArgs = function (arg1, arg2, arg3) { return [arg1, arg2, arg3] } threeArgs() // [undefined, undefined, undefined] threeArgs(1) // [1, undefined, undefined] threeArgs(1, 2) // [1, 2, undefined]
-
-
Spread syntax ( โฆ )
-
์ ๊ฐ ๊ตฌ๋ฌธ
-
์ ๊ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ด ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ ์์, ํจ์์ ๊ฒฝ์ฐ๋ ์ธ์๋ก ํ์ฅํ ์ ์์
-
๋ฐฐ์ด๊ณผ์ ์ฌ์ฉ ( ๋ฐฐ์ด ๋ณต์ฌ )
let parts = ['shoulders', 'knees'] let lyrics = ['head', ...parts, 'and', 'toes'] // ['head', 'shoulders', 'knees', 'and', 'toes']
-
ํจ์์์ ์ฌ์ฉ (
Rest parameters
)- ์ ํด์ง์ง ์์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์ ์ ์์
function func(a, b, ...theArgs) { // }
const restOpr = function (arg1, arg2, ...restArgs) { return [arg1, arg2, restArgs] } restOpr(1, 2, 3, 4, 5) // [1, 2, [3, 4, 5]] restOpr(1, 2) // [1, 2, []]
-
-
-
ํจ์์ ํ์
- ์ ์ธ์ ํจ์์ ํํ์ ํจ์ ๋ชจ๋ ํ์ ์ function ์ผ๋ก ๋์ผ
// ํจ์ ํํ์ const add = function (args) { } // ํจ์ ์ ์ธ์ function sub(args) { } console.log(typeof add) // function console.log(typeof sub) // function
-
ํธ์ด์คํ - ์ ์ธ์
- ํจ์ ์ ์ธ์์ผ๋ก ์ ์ํ ํจ์๋ var๋ก ์ ์ํ ๋ณ์์ฒ๋ผ ํธ์ด์คํ ์ด ๋ฐ์
- ์ฆ, ํจ์ ํธ์ถ ์ดํ์ ์ ์ธํด๋ ๋์
add(2, 7) // 9 function add (num1, num2) { return num1 + num2 }
-
ํธ์ด์คํ - ํํ์
- ํจ์ ํํ์์ผ๋ก ์ ์ธํ ํจ์๋ ํจ์ ์ ์ ์ ์ ํธ์ถ ์ ์๋ฌ ๋ฐ์
- ํจ์ ํํ์์ผ๋ก ์ ์๋ ํจ์๋ ๋ณ์๋ก ํ๊ฐ๋์ด ๋ณ์์ scope ๊ท์น์ ๋ฐ๋ฆ
sub(7, 2) // Uncaught ReferenceError : Cannot access 'sub' before initialization const sub = function (num1, num2) { return num1 - num2 }
-
์ ์ธ์๊ณผ ํํ์ ์ ๋ฆฌ
์ ์ธ์ (declaration) ํํ์ (expression) ๊ณตํต์ ๋ฐ์ดํฐ ํ์ , ํจ์ ๊ตฌ์ฑ ์์ (์ด๋ฆ, ๋งค๊ฐ๋ณ์, ๋ฐ๋) ๋ฐ์ดํฐ ํ์ , ํจ์ ๊ตฌ์ฑ ์์ (์ด๋ฆ, ๋งค๊ฐ๋ณ์, ๋ฐ๋) ์ฐจ์ด์ ์ต๋ช ํจ์ ๋ถ๊ฐ๋ฅ, ํธ์ด์คํ ์์ ์ต๋ช ํจ์ ๊ฐ๋ฅ, ํธ์ด์คํ ์์ ๋น๊ณ Airbnb Style Guide ๊ถ์ฅ ๋ฐฉ์
-
ํ์ดํ ํจ์ (Arrow Function)
-
ํจ์๋ฅผ ๋น๊ต์ ๊ฐ๊ฒฐํ๊ฒ ์ ์ํ ์ ์๋ ๋ฌธ๋ฒ
-
function ํค์๋์ ์ค๊ดํธ๋ฅผ ์ด์ฉํ ๊ตฌ๋ฌธ์ ์งง๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ํ์
function
ํค์๋ ์๋ต ๊ฐ๋ฅ- ํจ์์ ๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ฟ์ด๋ผ๋ฉด ๋งค๊ฐ๋ณ์์
()
์๋ต ๊ฐ๋ฅ - ํจ์์ ๋ด์ฉ์ด ํ ์ค์ด๋ผ๋ฉด
{}
์return
๋ ์๋ต ๊ฐ๋ฅ
-
ํ์ดํ ํจ์๋ ํญ์ ์ต๋ช ํจ์
- ๋ฐ๋ผ์ ํจ์ ํํ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
-
ํ์ดํ ํจ์ ์์
const arrow1 = function (name) { return `hello, ${name}` } // 1. function ํค์๋ ์ญ์ const arrow2 = (name) => { return `hello, ${name}` } // 2. ์ธ์๊ฐ 1๊ฐ์ผ ๊ฒฝ์ฐ์๋ง () ์๋ต ๊ฐ๋ฅ const arrow3 = name => { return `hello, ${name}` } // 3. ํจ์ ๋ฐ๋๊ฐ return์ ํฌํจํ ํํ์ 1๊ฐ์ผ ๊ฒฝ์ฐ์ {}, return ์ญ์ ๊ฐ๋ฅ const arrow4 = name => `hello, ${name}`
- ๋ช ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ํด ํญ์ ์ธ์ ์ฃผ์์๋ ๊ดํธ ( ) ๋ฅผ ํฌํจํ๋ ๊ฒ์ ๊ถ์ฅ
-
ํ์ดํ ํจ์ ์์ฉ
// 1. ์ธ์๊ฐ ์๋ค๋ฉด? () or _๋ก ํ์ ๊ฐ๋ฅ let noArgs = () => 'No args' noArgs = _ => 'No args' // 2-1. **object๋ฅผ return** ํ๋ค๋ฉด let returnObject = () => { return { key: 'value' } } // return ์ ๋ช ์์ ์ผ๋ก ์ ์ด์ค // 2-2. return์ ์ ์ง ์์ผ๋ ค๋ฉด ๊ดํธ๋ฅผ ๋ถ์ฌ์ผ ํจ returnObject = () => ({ key: 'value' })
-
-
์ฆ์ ์คํ ํจ์(IIFE, Immediately Invoked Function Expression)
- ์ ์ธ๊ณผ ๋์์ ์คํ๋๋ ํจ์
- ํจ์์ ์ ์ธ ๋์ ( ) ๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ธ๋์๋ง์ ์คํํ๋ ํํ
- ( ) ์ ๊ฐ์ ๋ฃ์ด ์ธ์๋ก ๋๊ฒจ์ค ์ ์์
- ์ฆ์ ์คํ ํจ์๋ ์ ์ธ๊ณผ ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํจ์๋ฅผ ๋ค์ ํธ์ถํ ์ ์์
- ์ด๋ฌํ ํน์ง์ ์ด๋ ค ์ด๊ธฐํ ๋ถ๋ถ์ ๋ง์ด ์ฌ์ฉ
- ์ผํ์ฑ ํจ์์ด๋ฏ๋ก ์ต๋ช ํจ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์
(function(num) { return num ** 3 })(2) // 8 (num => num ** 3)(2) // 8
- ๊ฐ์
- JavaScript์ ๋ฐ์ดํฐ ํ์ ์ค ์ฐธ์กฐ ํ์ (reference)์ ํด๋นํ๋ ํ์ ์ Array์ Object์ด๋ฉฐ, ๊ฐ์ฒด๋ผ๊ณ ๋ ๋งํจ
- ๊ฐ์ฒด๋ ์์ฑ๋ค์ ๋ชจ์(collection)
- ํค์ ์์ฑ๋ค์ ๋ด๊ณ ์๋ ์ฐธ์กฐ ํ์ ์ ๊ฐ์ฒด
- ์์๋ฅผ ๋ณด์ฅํ๋ ํน์ง์ด ์์
- ์ฃผ๋ก ๋๊ดํธ([ ])๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ๊ณ , 0์ ํฌํจํ ์์ ์ ์ ์ธ๋ฑ์ค๋ก ํน์ ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ
- ๋ฐฐ์ด์ ๊ธธ์ด๋ array.length ํํ๋ก ์ ๊ทผ ๊ฐ๋ฅ
- ์ฐธ๊ณ ) ๋ฐฐ์ด์ ๋ฐ์ง๋ง ์์๋ array.length -1 ๋ก ์ ๊ทผ
const numbers = [1, 2, 3, 4, 5]
console.log(numbers[0]) // 1
console.log(numbers[-1]) // undefined
console.log(numbers.length) // 5
const numbers = [1, 2, 3, 4, 5]
console.log(numbers[numbers.length - 1]) // 5
console.log(numbers[numbers.length - 2]) // 4
console.log(numbers[numbers.length - 3]) // 3
console.log(numbers[numbers.length - 4]) // 2
console.log(numbers[numbers.length - 5]) // 1
๋ฉ์๋ | ์ค๋ช | ๋น๊ณ |
---|---|---|
reverse | ์๋ณธ ๋ฐฐ์ด์ ์์๋ค์ ์์๋ฅผ ๋ฐ๋๋ก ์ ๋ ฌ | |
push & pop | ๋ฐฐ์ด์ ๊ฐ์ฅ ๋ค์ ์์๋ฅผ ์ถ๊ฐ ๋๋ ์ ๊ฑฐ | |
unshift & shift | ๋ฐฐ์ด์ ๊ฐ์ฅ ์์ ์์๋ฅผ ์ถ๊ฐ ๋๋ ์ ๊ฑฐ | |
includes | ๋ฐฐ์ด์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ๋ณ ํ ์ฐธ/๊ฑฐ์ง ๋ฐํ | |
indexOf | ๋ฐฐ์ด์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ๋ณ ํ ์ธ๋ฑ์ค ๋ฐํ | ์์๊ฐ ์์ ๊ฒฝ์ฐ -1 ๋ฐํ |
join | ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๊ตฌ๋ถ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ๊ฒฐ | ๊ตฌ๋ถ์ ์๋ต ์ ์ผํ ๊ธฐ์ค |
-
array.reverse()
- ์๋ณธ ๋ฐฐ์ด ์์๋ค์ ์์๋ฅผ ๋ฐ๋๋ก ์ ๋ ฌ
const numbers = [1, 2, 3, 4, 5] numbers.reverse() console.log(numbers) // [5, 4, 3, 2, 1]
-
array.push()
- ๋ฐฐ์ด์ ๊ฐ์ฅ ๋ค์ ์์ ์ถ๊ฐ
-
array.pop()
- ๋ฐฐ์ด์ ๋ง์ง๋ง ์์ ์ ๊ฑฐ
const numbers = [1, 2, 3, 4, 5] numbers.push(100) console.log(numbers) // [1, 2, 3, 4, 5, 100] numbers.pop() console.log(numbers) // [1, 2, 3, 4, 5]
-
array.includes(value)
- ๋ฐฐ์ด์ ํน์ ๊ฐ(value)์ด ์กด์ฌํ๋์ง ํ๋ณ ํ true ๋๋ false ๋ฐํ
const numbers = [1, 2, 3, 4, 5] console.log(numbers.includes(1)) // true console.log(numbers.includes(100)) // false
-
array.indexOf(value)
- ๋ฐฐ์ด์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธ ํ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ๋ก ์ฐพ์ ์์์ ์ธ๋ฑ์ค ๋ฐํ
- ๋ง์ฝ ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ -1 ๋ฐํ
const numbers = [1, 2, 3, 4, 5] let result result = numbers.indexOf(3) // 2 console.log(result) result = numbers.indexOf(100) // -1 console.log(result)
-
array.join([separator])
- ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐํ
- separator(๊ตฌ๋ถ์)๋ ์ ํ์ ์ผ๋ก ์ง์ ๊ฐ๋ฅํ๋ฉฐ, ์๋ต ์ ์ผํ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ
const numbers = [1, 2, 3, 4, 5] let result result = numbers.join() // 1, 2, 3, 4, 5 console.log(result) result = numbers.join('') // 12345 console.log(result) result = numbers.join(' ') // 1 2 3 4 5 console.log(result) result = numbers.join('-') // 1-2-3-4-5 console.log(result)
-
Array Helper Methods
- ๋ฐฐ์ด์ ์ํํ๋ฉฐ ํน์ ๋ก์ง์ ์ํํ๋ ๋ฉ์๋
- ๋ฉ์๋ ํธ์ถ ์ ์ธ์๋ก
callback ํจ์
๋ฅผ ๋ฐ๋ ๊ฒ์ด ํน์งcallback ํจ์ : ์ด๋ค ํจ์์ ๋ด๋ถ์์ ์คํ๋ ๋ชฉ์ ์ผ๋ก, ์ธ์๋ก ๋๊ฒจ๋ฐ๋ ํจ์
-
forEach
array.forEach((element, index, array) => { // do something })
array.forEach(callback(element[, index[,array]]))
- ์ธ์๋ก ์ฃผ์ด์ง๋ ํจ์(์ฝ๋ฐฑ ํจ์)๋ฅผ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ํ ๋ฒ์ฉ ์คํ
- ์ฝ๋ฐฑ ํจ์๋ 3๊ฐ์ง ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑ
- element : ๋ฐฐ์ด์ ์์
- index : ๋ฐฐ์ด ์์์ ์ธ๋ฑ์ค
- array : ๋ฐฐ์ด ์์ฒด
- ๋ฐํ๊ฐ(return) ์์
- ์ฝ๋ฐฑ ํจ์๋ 3๊ฐ์ง ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑ
// 1. ์ผ๋จ ์ฌ์ฉํด๋ณด๊ธฐ const colors = ['red', 'blue', 'green'] printFunc = function (color) { console.log(color) } colors.forEach(printFunc) // red // blue // green
// 2. ํจ์ ์ ์๋ฅผ ์ธ์๋ก ๋ฃ์ด๋ณด๊ธฐ colors.forEach(function (color) { console.log(color) })
// 3. ํ์ดํ ํจ์ ์ ์ฉํ๊ธฐ colors.forEach((color) => { return console.log(color) })
-
map
array.map((element, index, array) => { // do something })
array.map(callback(element[, index[, array]]))
- ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฝ๋ฐฑ ํจ์๋ฅผ ํ ๋ฒ์ฉ ์คํ
- ์ฝ๋ฐฑ ํจ์์ ๋ฐํ ๊ฐ์ ์์๋ก ํ๋ ์๋ก์ด ๋ฐฐ์ด ๋ฐํ
- ๊ธฐ์กด ๋ฐฐ์ด ์ ์ฒด๋ฅผ ๋ค๋ฅธ ํํ๋ก ๋ฐ๊ฟ ๋ ์ ์ฉ
forEach + return
์ด๋ผ๊ณ ์๊ฐํ๊ธฐ
// 1. ์ผ๋จ ์ฌ์ฉํด๋ณด๊ธฐ const numbers = [1, 2, 3] // ํจ์ ์ ์ (ํํ์) const doubleFunc = function (number) { return number * 2 } // ํจ์๋ฅผ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ๋ฃ๊ธฐ (์ฝ๋ฐฑ ํจ์) const doubleNumbers = numbers.map(doubleFunc) console.log(doubleNumbers) // [2, 4, 6]
// 2. ํจ์ ์ ์๋ฅผ ์ธ์๋ก ๋ฃ์ด๋ณด๊ธฐ const doubleNumbers = numbers.map(function (number) { return number * 2 }) console.log(doubleNumbers) // [2, 4, 6]
// 3. ํ์ดํ ํจ์ ์ ์ฉํ๊ธฐ const doubleNumbers = numbers.map((number) => { return number * 2 }) console.log(doubleNumbers) // [2, 4, 6]
-
filter
array.filter((element, index, array) => { // do something })
array.filter(callback(element[, index[, array]]))
- ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฝ๋ฐฑ ํจ์๋ฅผ ํ ๋ฒ์ฉ ์คํ
- ์ฝ๋ฐฑ ํจ์์ ๋ฐํ ๊ฐ์ด true์ธ ์์๋ค๋ง ๋ชจ์์ ์๋ก์ด ๋ฐฐ์ด ๋ฐํ
- ๊ธฐ์กด ๋ฐฐ์ด์ ์์๋ค์ ํํฐ๋งํ ๋ ์ ์ฉ
// 1. ์ผ๋จ ์ฌ์ฉํด๋ณด๊ธฐ const products = [ { name: 'cucumber', type: 'vegetable' }, { name: 'banana', type: 'fruit' }, { name: 'carrot', type: 'vegetable' }, { name: 'apple', type: 'fruit' }, ] // ํจ์ ์ ์ํ๊ณ const fruitFilter = function (product) { return product.type === 'fruit' } // ์ฝ๋ฐฑ์ผ๋ก ๋๊ธฐ๊ณ const fruits = products.filter(fruitFilter) console.log(fruits) // [{ name: 'banana', type: 'fruit' }, { name: 'apple', type: 'fruit' } ]
// 2. ํจ์ ์ ์๋ฅผ ์ธ์๋ก ๋ฃ์ด๋ณด๊ธฐ const fruits = products.filter(function (product) { return product.type === 'fruit' })
// 3. ํ์ดํ ํจ์ ์ ์ฉํ๊ธฐ const fruits = products.filter((product) => { return product.type === 'fruit' })
-
reduce
array.reduce((acc, element, index, array) => { // do something }, initalValue)
array.reduce(callback(acc, element, [index[, array]])[, initialValue])
- ์ธ์๋ก ์ฃผ์ด์ง๋ ํจ์(์ฝ๋ฐฑ ํจ์)๋ฅผ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ํ ๋ฒ์ฉ ์คํํด์, ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํ
- ์ฆ, ๋ฐฐ์ด์ ํ๋์ ๊ฐ์ผ๋ก ๊ณ์ฐํ๋ ๋์์ด ํ์ํ ๋ ์ฌ์ฉ(์ดํฉ, ํ๊ท ๋ฑ)
- map, filter ๋ฑ ์ฌ๋ฌ ๋ฐฐ์ด ๋ฉ์๋ ๋์์ ๋๋ถ๋ถ ๋์ฒดํ ์ ์์
- reduce ๋ฉ์๋์ ์ฃผ์ ๋งค๊ฐ๋ณ์
- acc
- ์ด์ callback ํจ์์ ๋ฐํ ๊ฐ์ด ๋์ ๋๋ ๋ณ์
- initialValue (optional)
- ์ต์ด callback ํจ์ ํธ์ถ ์ acc์ ํ ๋น๋๋ ๊ฐ, default ๊ฐ์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ
- acc
- reduce์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ ์ฝ๋ฐฑํจ์์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์(acc)๋ ๋์ ๋ ๊ฐ(์ ๋จ๊ณ๊น์ง์ ๊ฒฐ๊ณผ)
- reduce์ ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ initialValue๋ ๋์ ๋ ๊ฐ์ ์ด๊ธฐ๊ฐ, ์ง์ ํ์ง ์์ ์ ์ฒซ๋ฒ์งธ ์์์ ๊ฐ์ด ๋จ
๋น ๋ฐฐ์ด์ ๊ฒฝ์ฐ initialValue๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉด ์๋ฌ ๋ฐ์
const tests = [90, 90, 80, 77] // ์ดํฉ const sum = tests.reduce(function (total, x) { return total + x }, 0) // ์ฌ๊ธฐ์ 0 ์๋ต ๊ฐ๋ฅ // ํ์ดํ ํจ์ const sum = tests.reduce((total, x) => total + x, 0) // ํ๊ท const sum = tests.reduce((total, x) => total + x, 0) / tests.length
-
find
array.find((element, index, array) => { // do something }
array.find(callback(element[, index[, array]]))
- ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฝ๋ฐฑ ํจ์๋ฅผ ํ ๋ฒ์ฉ ์คํ
- ์ฝ๋ฐฑ ํจ์์ ๋ฐํ ๊ฐ์ด true๋ฉด, ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฐํ
- ์ฐพ๋ ๊ฐ์ด ๋ฐฐ์ด์ ์์ผ๋ฉด undefined ๋ฐํ
const avengers = [ { name: 'Tony Stark', age: 45 }, { name: 'Steve Rogers', age: 32 }, { name: 'Thor', age: 40 } ] const avenger = avengers.find(function (avenger) { return avenger.name === 'Tony Stark' }) // ํ์ดํ ํจ์ ์ ์ฉ const avenger = avengers.find((avenger) => { return avenger.name === 'Tony Stark' })
-
some
array.some((element, index, array) => { // do something }
array.some(callback(element[, index[, array]]))
- ๋ฐฐ์ด์ ์์ ์ค ํ๋๋ผ๋ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ํต๊ณผํ๋ฉด true ๋ฐํ
- ๋ชจ๋ ์์๊ฐ ํต๊ณผํ์ง ๋ชปํ๋ฉด ๊ฑฐ์ง ๋ฐํ
- ๋น ๋ฐฐ์ด์ ํญ์ false ๋ฐํ
const arr = [1, 2, 3, 4, 5] const result = arr.some((elem) => { return elem % 2 === 0 }) //true
-
every
array.every((element, index, array) => { // do something })
array.every(callback(element[, index[, array]]))
- ๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ํต๊ณผํ๋ฉด true ๋ฐํ
- ํ๋์ ์์๋ผ๋ ํต๊ณผํ์ง ๋ชปํ๋ฉด false ๋ฐํ
- ๋น ๋ฐฐ์ด์ ํญ์ true ๋ฐํ
const arr = [1, 2, 3, 4, 5] const result = arr.every((elem) => { return elem % 2 === 0 }) //false
-
๋ฐฐ์ด ์ํ ๋น๊ต
-
๊ฐ์
- ๊ฐ์ฒด๋ ์์ฑ(property)์ ์งํฉ์ด๋ฉฐ
- ์ค๊ดํธ ๋ด๋ถ์ key์ value์ ์์ผ๋ก ํํ
- key
- ๋ฌธ์์ด ํ์ ๋ง ๊ฐ๋ฅ
- key ์ด๋ฆ์ ๋์ด์ฐ๊ธฐ ๋ฑ์ ๊ตฌ๋ถ์๊ฐ ์์ผ๋ฉด ๋ฐ์ดํ๋ก ๋ฌถ์ด์ ํํ
- value
- ๋ชจ๋ ํ์ (ํจ์ ํฌํจ) ๊ฐ๋ฅ
- ๊ฐ์ฒด ์์ ์ ๊ทผ
- ์ (.) ๋๋ ๋๊ดํธ([ ])๋ก ๊ฐ๋ฅ
- key ์ด๋ฆ์ ๋์ด์ฐ๊ธฐ ๊ฐ์ ๊ตฌ๋ถ์๊ฐ ์์ผ๋ฉด ๋๊ดํธ ์ ๊ทผ๋ง ๊ฐ๋ฅ
-
์์
const me = { name: 'jack', phoneNumber: '01012345678', 'samsung products': { buds: 'Galaxy Buds pro', galaxy: 'Galaxy s99' }, } console.log(me.name) console.log(me['name']) console.log(me['samsung products']) console.log(me.samsung products]) // ๋ถ๊ฐ๋ฅ console.log(me['samsung products'].buds)
-
๊ฐ์ฒด ๊ด๋ จ ES6 ๋ฌธ๋ฒ ์ตํ๊ธฐ
- ์์ฑ๋ช ์ถ์ฝ
- ๋ฉ์๋๋ช ์ถ์ฝ
- ๊ณ์ฐ๋ ์์ฑ๋ช ์ฌ์ฉ
- ๊ตฌ์กฐ ๋ถํด ํ ๋น
- ๊ฐ์ฒด ์ ๊ฐ ๊ตฌ๋ฌธ(Spread Operator)
-
์์ฑ๋ช ์ถ์ฝ
- ๊ฐ์ฒด๋ฅผ ์ ์ํ ๋ key์ ํ ๋นํ๋ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ผ๋ฉด ์์์ ๊ฐ์ด ์ถ์ฝ ๊ฐ๋ฅ
// ES5 var books = ['Learning JavaScript', 'Learning Python'] var magazines = ['Vogue', 'Science'] var bookShop = { books: books, magazines: magazines, } console.log(bookShop) /* { books: ['Learning JavaScript', 'Learning Python'], magazines: ['Vogue', 'Science'] } */ // ES6+ const books = ['Learning JavaScript', 'Learning Python'] const magazines = ['Vogue', 'Science'] const bookShop = { books, magazines, } console.log(bookShop) /* { books: ['Learning JavaScript', 'Learning Python'], magazines: ['Vogue', 'Science'] } */
-
๋ฉ์๋๋ช ์ถ์ฝ
- ๋ฉ์๋ ์ ์ธ ์ function ํค์๋ ์๋ต
// ES5 var obj = { greeting: function () { console.log('Hi~') } } obj.greeting() // Hi~
// ES6+ const obj = { greeting() { console.log('Hi~') } } obj.greeting() // Hi~
-
๊ณ์ฐ๋ ์์ฑ
- ๊ฐ์ฒด๋ฅผ ์ ์ํ ๋ key์ ์ด๋ฆ์ ํํ์์ ์ด์ฉํ์ฌ ๋์ ์ผ๋ก ์์ฑ ๊ฐ๋ฅ
const key = 'country' const value = ['ํ๊ตญ', '๋ฏธ๊ตญ', '์ผ๋ณธ', '์ค๊ตญ'] const myObj = { [key]: value, } console.log(myObj) // { country: ['ํ๊ตญ', '๋ฏธ๊ตญ', '์ผ๋ณธ', '์ค๊ตญ'] } console.log(myObj.country) // ['ํ๊ตญ', '๋ฏธ๊ตญ', '์ผ๋ณธ', '์ค๊ตญ']
-
๊ตฌ์กฐ ๋ถํด ํ ๋น
- ๋ฐฐ์ด ๋๋ ๊ฐ์ฒด๋ฅผ ๋ถํดํ์ฌ ์์ฑ์ ๋ณ์์ ์ฝ๊ฒ ํ ๋นํ ์ ์๋ ๋ฌธ๋ฒ
-
Spread syntax (โฆ)
-
๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๊ฐ๊ตฌ๋ฌธ์ ์ฌ์ฉํด ๊ฐ์ฒด ๋ด๋ถ์์ ๊ฐ์ฒด ์ ๊ฐ ๊ฐ๋ฅ
-
์์ ๋ณต์ฌ์ ํ์ฉ ๊ฐ๋ฅ
const obj = {b: 2, c: 3, d: 4} const newObj = {a: 1, ...obj, e: 5} console.log(newObj) // {a: 1, b: 2, c: 3, d: 4, e: 5}
-
-
JSON
- JavaScript Object Notation
- Key - Value ํํ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ ํ๊ธฐ๋ฒ
- JavaScript์ Object์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง Object๋ ๊ทธ ์์ฒด๋ก ํ์ ์ด๊ณ , JSON์ ํ์์ด ์๋ โ๋ฌธ์์ดโ
- ์ฆ, JSON์ Object๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ณํ ์์ ์ด ํ์
-
์ฐธ๊ณ ) ๋ฐฐ์ด์ ๊ฐ์ฒด๋ค
- ๋ฐฐ์ด์ ํค์ ์์ฑ๋ค์ ๋ด๊ณ ์๋ ์ฐธ์กฐ ํ์ ์ ๊ฐ์ฒด
- ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํค๋ก ๊ฐ์ง๋ฉฐ length ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ํน์ํ ๊ฐ์ฒด
- ๋ธ๋ผ์ฐ์ ์์์ JavaScript
- JavaScript๋ ์น ํ์ด์ง์์ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์คํฌ๋ฆฝํธ ์ธ์ด
- ์ ์ ์ธ ์ ๋ณด๋ง ๋ณด์ฌ์ฃผ๋ ์น ํ์ด์ง๋ฅผ ๋ฐ์ดํฐ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ๋๊ฑฐ๋, ์ฌ์ฉ์์ ์ํธ ์์ฉ์ ํ๊ฑฐ๋, ์ ๋๋ฉ์ด์ ๋ฑ์ด ๋์ํ๊ฒ ํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํจ
- ์ฐธ๊ณ ) ์คํฌ๋ฆฝํธ ์ธ์ด (Script Language)
- ๊ธฐ์กด์ ์กด์ฌํ๋ ์์ฉ ์ํํธ์จ์ด๋ฅผ ์ ์ดํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- JavaScript๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์์ ์ญํ ๋ ๊ฐ๋ฅํ์ง๋ง ํด๋ผ์ด์ธํธ ์ฌ์ด๋ JavaScript ์ธ์ด ์์ ์ฌ๋ผ๊ฐ ์๋ ๊ธฐ๋ฅ๋ค์ ๋ ๋ค์ํจ
- API๋ผ๊ณ ๋ถ๋ฅด๋ ์ด ๊ธฐ๋ฅ๋ค์ JavaScript ์ฝ๋์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ๋ค์ ๋ ๋ฌด๊ถ๋ฌด์งํ๊ฒ ๋ง๋ค์ด ์ค
- ์ด API๋ ์ผ๋ฐ์ ์ผ๋ก 2๊ฐ์ ๋ฒ์ฃผ๋ก ๋ถ๋ฅํ ์ ์์
- Browser APIs
- Third party APIs
- ๋ธ๋ผ์ฐ์ ์ ํ์ฌ๋์ง ์์ API
- ์น์์ ์ง์ ์ฝ๋์ ์ ๋ณด๋ฅผ ์ฐพ์์ผ ํจ
- Google map API, kakao login API ๋ฑ
- Browser APIs
- ์น ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋ API๋ก, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ฌ ์ปดํจํฐ ํ๊ฒฝ์ ๊ดํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ์ค๋์ค๋ฅผ ์ฌ์ํ๋ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ ์ฉํ๊ณ ๋ณต์กํ ์ผ์ ์ํํ ์ ์๊ฒ ํจ
- JavaScript๋ก Browser API ๋ค์ ์ฌ์ฉํด์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์
- ์ข
๋ฅ
- DOM
- Geolocaton API
- WebGL
- ๋ฑ๋ฑโฆ
- ๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ณผ์
- ์น ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ๋ถ๋ฌ์ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ฝ๋(HTML, CSS, JavaScript)๋ฅผ ์คํ ํ๊ฒฝ(๋ธ๋ผ์ฐ์ ํญ)์์ ์คํ
- JavaScript๋ DOM API๋ฅผ ํตํด HTML๊ณผ CSS๋ฅผ ๋์ ์ผ๋ก ์์ , ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ผ์ ๊ฐ์ฅ ๋ง์ด ์ฐ์
- DOM
- ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ (Document Object Model)
- ๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
- ๋ฌธ์ ๊ตฌ์กฐ, ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋์
- HTML ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐ, ์ ๊ฑฐ, ๋ณ๊ฒฝํ๊ณ , ๋์ ์ผ๋ก ํ์ด์ง์ ์คํ์ผ์ ์ถ๊ฐํ๋ ๋ฑ HTML/CSS๋ฅผ ์กฐ์ํ ์ ์์
- HTML ๋ฌธ์๋ฅผ ๊ตฌ์กฐํํ์ฌ ๊ฐ ์์๋ฅผ ๊ฐ์ฒด (object) ๋ก ์ทจ๊ธ
- ๋จ์ํ ์์ฑ ์ ๊ทผ, ๋ฉ์๋ ํ์ฉ ๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํน์ฑ์ ํ์ฉํ ์กฐ์์ด ๊ฐ๋ฅํจ
- DOM์ ๋ฌธ์๋ฅผ ๋ ผ๋ฆฌ ํธ๋ฆฌ๋ก ํํ
- DOM ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ํธ๋ฆฌ์ ์ ๊ทผ ๊ฐ๋ฅ, ์ด๋ฅผ ํตํด ๋ฌธ์์ ๊ตฌ์กฐ, ์คํ์ผ, ์ปจํ ์ธ ๋ฅผ ๋ณ๊ฒฝํ ์ ์์
- ์น ํ์ด์ง๋ ์ผ์ข ์ ๋ฌธ์(document)
- ์ด ๋ฌธ์๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๊ทธ ๋ด์ฉ์ด ํด์๋์ด ์น ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ํ๋๊ฑฐ๋ HTML ์ฝ๋ ์์ฒด๋ก ๋ํ๋๊ธฐ๋ ํจ
- DOM์ ๋์ผํ ๋ฌธ์๋ฅผ ํํํ๊ณ , ์ ์ฅํ๊ณ , ์กฐ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
- DOM์ ์น ํ์ด์ง์ ๊ฐ์ฒด ์งํฅ ํํ์ด๋ฉฐ, JavaScript์ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ์ด์ฉํด DOM์ ์์ ํ ์ ์์
- DOM์ ์ ๊ทผํ๊ธฐ
- DOM์ ์ฌ์ฉํ๊ธฐ ์ํด ํน๋ณํ ํด์ผ ํ ์ผ์ ์์
- ๋ชจ๋ ์น ๋ธ๋ผ์ฐ์ ๋ ์คํฌ๋ฆฝํธ ์ธ์ด๊ฐ ์์ฝ๊ฒ ์น ํ์ด์ง์ ์์์ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์ํด DOM ๊ตฌ์กฐ๋ฅผ ํญ์ ์ฌ์ฉ
- ์ฐ๋ฆฌ๋ โDOM์ ์ฃผ์ ๊ฐ์ฒดโ๋ค์ ํ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์กฐ์ํ๊ฑฐ๋ ํน์ ์์๋ค์ ์ป์ ์ ์์
- DOM์ ์ฃผ์ ๊ฐ์ฒด
window
document
- navigator, location, history, screen ๋ฑ
window
object- DOM ์ ํํํ๋ ์ฐฝ
- ๊ฐ์ฅ ์ต์์ ๊ฐ์ฒด (์์ฑ ์ ์๋ต ๊ฐ๋ฅ)
- ํญ ๊ธฐ๋ฅ์ด ์๋ ๋ธ๋ผ์ฐ์ ์์๋ ๊ฐ๊ฐ์ ํญ์ ๊ฐ๊ฐ์ window ๊ฐ์ฒด๋ก ๋ํ๋
document
object- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ถ๋ฌ์จ ์น ํ์ด์ง
- ํ์ด์ง ์ปจํ ์ธ ์ ์ง์ ์ ์ญํ ์ ํ๋ฉฐ, ๋ฑ๊ณผ ๊ฐ์ ์๋ง์ ๋ค๋ฅธ ์์๋ค์ ํฌํจํ๊ณ ์์
- [์ฐธ๊ณ ] ํ์ฑ (Parsing)
- ๊ตฌ๋ฌธ ๋ถ์, ํด์
- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌธ์์ด์ ํด์ํ์ฌ DOM Tree๋ก ๋ง๋๋ ๊ณผ์
-
๊ฐ์
- Document๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํด ์น ํ์ด์ง ๋ฌธ์ ์กฐ์ํ๊ธฐ
- DOM ์กฐ์ ์์
- ์ ํ (Select)
- ์กฐ์ (Manipulation)
- ์์ฑ, ์ถ๊ฐ, ์ญ์ ๋ฑ
-
์ ํ ๊ด๋ จ ๋ฉ์๋
document.querySelector(selector)
- ์ ๊ณตํ ์ ํ์์ ์ผ์นํ๋ element ํ ๊ฐ ์ ํ
- ์ ๊ณตํ CSS selector๋ฅผ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ element ๊ฐ์ฒด๋ฅผ ๋ฐํ (์๋ค๋ฉด null ๋ฐํ)
document.querySelectorAll(selector)
- ์ ๊ณตํ ์ ํ์์ ์ผ์นํ๋ ์ฌ๋ฌ element๋ฅผ ์ ํ
- ๋งค์นญํ ํ๋ ์ด์์ selector๋ฅผ ํฌํจํ๋ ์ ํจํ CSS selector๋ฅผ ์ธ์(๋ฌธ์์ด)๋ก ๋ฐ์
- ์ ๊ณตํ CSS selector๋ฅผ ๋ง์กฑํ๋ NodeList๋ฅผ ๋ฐํ
-
[์ฐธ๊ณ ] NodeList
- index๋ก๋ง ๊ฐ ํญ๋ชฉ์ ์ ๊ทผ ๊ฐ๋ฅ
- ๋ฐฐ์ด์ forEach ๋ฉ์๋ ๋ฐ ๋ค์ํ ๋ฐฐ์ด ๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
querySelectorAll()
์ ์ํด ๋ฐํ๋๋ NodeList๋ DOM์ ๋ณ๊ฒฝ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ์ง ์์
-
์กฐ์ ๊ด๋ จ ๋ฉ์๋ (์์ฑ)
document.createElement(tagName)
- ์์ฑํ tagName์ HTML ์์๋ฅผ ์์ฑํ์ฌ ๋ฐํ
-
์กฐ์ ๊ด๋ จ ๋ฉ์๋ (์ ๋ ฅ)
Node.innerText
- Node ๊ฐ์ฒด์ ๊ทธ ์์์ ํ
์คํธ ์ปจํ
์ธ (DOMString) ๋ฅผ ํํ
- ํด๋น ์์ ๋ด๋ถ์ raw text
- ์ฌ๋์ด ์ฝ์ ์ ์๋ ์์๋ง ๋จ๊น
- ์ฆ, ์ค ๋ฐ๊ฟ์ ์ธ์ํ๊ณ ์จ๊ฒจ์ง ๋ด์ฉ์ ๋ฌด์ํ๋ ๋ฑ ์ต์ข ์ ์ผ๋ก ์คํ์ผ๋ง์ด ์ ์ฉ๋ ๋ชจ์ต์ผ๋ก ํํ๋จ
- Node ๊ฐ์ฒด์ ๊ทธ ์์์ ํ
์คํธ ์ปจํ
์ธ (DOMString) ๋ฅผ ํํ
-
์กฐ์ ๊ด๋ จ ๋ฉ์๋ (์ถ๊ฐ)
Node.appendChild()
- ํ Node๋ฅผ ํน์ ๋ถ๋ชจ Node์ ์์ NodeList ์ค ๋ง์ง๋ง ์์์ผ๋ก ์ฝ์
- ํ๋ฒ์ ์ค์ง ํ๋์ Node๋ง ์ถ๊ฐํ ์ ์์
- ์ถ๊ฐ๋ Node ๊ฐ์ฒด๋ฅผ ๋ฐํ
- ๋ง์ฝ ์ฃผ์ด์ง Node๊ฐ ์ด๋ฏธ ๋ฌธ์์ ์กด์ฌํ๋ ๋ค๋ฅธ Node๋ฅผ ์ฐธ์กฐํ๋ค๋ฉด ํ์ฌ ์์น์์ ์๋ก์ด ์์น๋ก ์ด๋
-
์กฐ์ ๊ด๋ จ ๋ฉ์๋ (์ญ์ )
Node.removeChild()
- DOM์์ ์์ Node๋ฅผ ์ ๊ฑฐ
- ์ ๊ฑฐ๋ Node๋ฅผ ๋ฐํ
-
ex)
// h1 ์์(element)๋ฅผ ๋ง๋ค๊ณ const title = document.createElement('h1') // ํ ์คํธ๋ฅผ ์ถ๊ฐ title.innerText = '์ด๊ฒ์ด ์ด๋ํ ์คํธ' // ์ ํ์๋ก div ํ๊ทธ๋ฅผ ๊ฐ์ ธ์์ const div = document.querySelector('div') // div ํ๊ทธ์ ์์ ์์๋ก ์ถ๊ฐ div.appendChild(title) // div์ h1 ์์ ์ญ์ div.removeChild(title)
-
์กฐ์ ๊ด๋ จ ๋ฉ์๋ (์์ฑ ์กฐํ ๋ฐ ์ค์ )
Element.getAttribute(attributeName)
- ํด๋น ์์์ ์ง์ ๋ ๊ฐ(๋ฌธ์์ด)์ ๋ฐํ
- ์ธ์(attributeName)๋ ๊ฐ์ ์ป๊ณ ์ ํ๋ ์์ฑ์ ์ด๋ฆ
Element.setAttribute(name, value)
- ์ง์ ๋ ์์์ ๊ฐ์ ์ค์
- ์์ฑ์ด ์ด๋ฏธ ์กด์ฌํ๋ฉด ๊ฐ์ ๊ฐฑ์ , ์กด์ฌํ์ง ์์ผ๋ฉด ์ง์ ๋ ์ด๋ฆ๊ณผ ๊ฐ์ผ๋ก ์ ์์ฑ์ ์ถ๊ฐ
- ์ ํํ๋ค
querySelector()
querySelectorAll()
- ์กฐ์ํ๋ค
innerText
setAttribute()
getAttribute()
createElement()
appendChild()
...
- ๊ฐ์
Event
๋ ํ๋ก๊ทธ๋๋ฐํ๊ณ ์๋ ์์คํ ์์ ์ผ์ด๋๋ ์ฌ๊ฑด(action) ํน์ ๋ฐ์(occurence)์ผ๋ก, ๊ฐ ์ด๋ฒคํธ์ ๋ํด ์กฐ์ํ ์ ์๋๋ก ํน์ ์์ ์ ์์คํ ์ด ์๋ ค์ฃผ๋ ๊ฒ- ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง์ ๋ฒํผ์ ํด๋ฆญํ๋ค๋ฉด ํด๋ฆญ์ ๋ํด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ์ฐ๋ฆฌ๋ ์ด๋ฒคํธ๋ฅผ ํตํด ํด๋ฆญ์ด๋ผ๋ ์ฌ๊ฑด์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฑฐ๋, ์กฐ์์ ํ ์ ์์
- ํด๋ฆญ ๋ง๊ณ ๋ ์น์์๋ ๊ฐ์๊ฐ์์ Event๊ฐ ์กด์ฌ
- ํค๋ณด๋ ํค ์ ๋ ฅ, ๋ธ๋ผ์ฐ์ ๋ซ๊ธฐ, ๋ฐ์ดํฐ ์ ์ถ, ํ ์คํธ ๋ณต์ฌ ๋ฑ
- Event object
- ๋คํธ์ํฌ ํ๋์ด๋ ์ฌ์ฉ์์์ ์ํธ์์ฉ ๊ฐ์ ์ฌ๊ฑด์ ๋ฐ์์ ์๋ฆฌ๊ธฐ ์ํ ๊ฐ์ฒด
- Event ๋ฐ์
- ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ๊ฑฐ๋ ํค๋ณด๋๋ฅผ ๋๋ฅด๋ ๋ฑ ์ฌ์ฉ์ ํ๋์ผ๋ก ๋ฐ์ํ ์๋ ์๊ณ
- ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก๋ ๋ง๋ค์ด ๋ผ ์ ์์
- DOM ์์๋ Event๋ฅผ ๋ฐ๊ณ (
"์์ "
) - ๋ฐ์ Event๋ฅผ
"์ฒ๋ฆฌ"
ํ ์ ์์- Event ์ฒ๋ฆฌ๋ ์ฃผ๋ก
addEventListener()
๋ผ๋ Event ์ฒ๋ฆฌ๊ธฐ(Event handler)๋ฅผ ๋ค์ํ html ์์์"๋ถ์ฐฉ"
ํด์ ์ฒ๋ฆฌํจ
- Event ์ฒ๋ฆฌ๋ ์ฃผ๋ก
- ๋์์ ํน์ Event๊ฐ ๋ฐ์ํ๋ฉด, ํ ์ผ์ ๋ฑ๋กํ์
- EventTarget.addEventListener(type, listener)
EventTarget.addEventListener(type, listener[, options])
- ์ง์ ํ Event๊ฐ ๋์์ ์ ๋ฌ๋ ๋๋ง๋ค ํธ์ถํ ํจ์๋ฅผ ์ค์
- Event๋ฅผ ์ง์ํ๋ ๋ชจ๋ ๊ฐ์ฒด(Element, Document, Window ๋ฑ)๋ฅผ ๋์(EventTarget)์ผ๋ก ์ง์ ๊ฐ๋ฅ
EventTarget.addEventListener(**type**, listener[, options])
- type
- ๋ฐ์ํ Event ์ ํ์ ๋ํ๋ด๋ ๋์๋ฌธ์ ๊ตฌ๋ถ ๋ฌธ์์ด
- ๋ํ ์ด๋ฒคํธ
- input, click, submit, โฆ
- type
EventTarget.addEventListener(type, **listener**[, options])
- listener
- ์ง์ ๋ ํ์ ์ Event๋ฅผ ์์ ํ ๊ฐ์ฒด
- JavaScript function ๊ฐ์ฒด (์ฝ๋ฐฑ ํจ์)์ฌ์ผ ํจ
- ์ฝ๋ฐฑ ํจ์๋ ๋ฐ์ํ Event์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง Event ๊ฐ์ฒด๋ฅผ ์ ์ผํ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์
- listener
addEventListener
์ ๋ฆฌ- ~ ํ๋ฉด ~ ํ๋ค.
- ํด๋ฆญํ๋ฉด, ๊ฒฝ๊ณ ์ฐฝ์ ๋์ด๋คโฆ
- ํน์ Event๊ฐ ๋ฐ์ํ๋ฉด, ํ ์ผ(์ฝ๋ฐฑ ํจ์)์ ๋ฑ๋กํ๋คโฆ
- ~ ํ๋ฉด ~ ํ๋ค.
event.preventDefault()
- ํ์ฌ Event์ ๊ธฐ๋ณธ ๋์์ ์ค๋จ
- HTML ์์์ ๊ธฐ๋ณธ ๋์์ ์๋ํ์ง ์๊ฒ ๋ง์
- HTML ์์์ ๊ธฐ๋ณธ ๋์ ์์
- a ํ๊ทธ : ํด๋ฆญ ์ ํน์ ์ฃผ์๋ก ์ด๋
- form ํ๊ทธ : form ๋ฐ์ดํฐ ์ ์ก
- ๋ชจ๋์ฑ, ์ฑ๋ฅ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ JavaScript ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- array, object ๋ฑ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ ์ ์ฉํ๊ณ ๊ฐํธํ ์ ํธ๋ฆฌํฐ ํจ์๋ค์ ์ ๊ณต
- ํจ์ ์์
- reverse, sortBy, range, random โฆ
- https://lodash.com/
- ์ด๋ ํ object๋ฅผ ๊ฐ๋ฆฌํค๋ ํค์๋
- java์์์ this์ python์์์ผ์ด self๋ ์ธ์คํด์ค ์๊ธฐ์์ ์ ๊ฐ๋ฆฌํด
- JavaScript์ ํจ์๋ ํธ์ถ๋ ๋ this๋ฅผ ์๋ฌต์ ์ผ๋ก ์ ๋ฌ ๋ฐ์
- JavaScript์์์ this๋ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ this์ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋์
- JavaScript๋ ํด๋น
ํจ์ ํธ์ถ ๋ฐฉ์
์ ๋ฐ๋ผ this์ ๋ฐ์ธ๋ฉ ๋๋ ๊ฐ์ฒด๊ฐ ๋ฌ๋ผ์ง - ์ฆ, ํจ์๋ฅผ ์ ์ธํ ๋ this์ ๊ฐ์ฒด๊ฐ ๊ฒฐ์ ๋๋ ๊ฒ์ด ์๋๊ณ , ํจ์๋ฅผ ํธ์ถํ ๋
ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ ๋์๋์ง์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์
๋จ
-
์ ์ญ ๋ฌธ๋งฅ์์์ this
-
ํจ์ ๋ฌธ๋งฅ์์์ this
- ๋จ์ ํธ์ถ
- Method (๊ฐ์ฒด์ ๋ฉ์๋๋ก์)
- Nested
-
์ ์ญ ๋ฌธ๋งฅ์์์ this
-
๋ธ๋ผ์ฐ์ ์ ์ ์ญ ๊ฐ์ฒด์ธ window๋ฅผ ๊ฐ๋ฆฌํด
- ์ ์ญ ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ผํ ์ต์์ ๊ฐ์ฒด๋ฅผ ์๋ฏธ
console.log(this) // window
-
-
ํจ์ ๋ฌธ๋งฅ์์์ this
-
ํจ์์ this ํค์๋๋ ๋ค๋ฅธ ์ธ์ด์ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋์
- this์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ ๋ฐฉ๋ฒ์ ์ํด ๊ฒฐ์ ๋จ
- ํจ์ ๋ด๋ถ์์ this์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ ๋ฐฉ๋ฒ์ ์ํด ์ข์ฐ๋จ
-
๋จ์ ํธ์ถ
-
์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
-
์ ์ญ์ ๋ธ๋ผ์ฐ์ ์์๋ window, Node.js๋ global์ ์๋ฏธํจ
const myFunc = function () { console.log(this) } // ๋ธ๋ผ์ฐ์ myFunc() // window // Node.js myFunc() // global
-
-
Method (Function in Object, ๊ฐ์ฒด์ ๋ฉ์๋๋ก์)
-
๋ฉ์๋๋ก ์ ์ธํ๊ณ ํธ์ถํ๋ค๋ฉด, ๊ฐ์ฒด์ ๋ฉ์๋์ด๋ฏ๋ก ํด๋น ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ
const myObj = { data: 1, myFunc() { console.log(this) // myObj console.log(this.data) // 1 } } myObj.myFunc() // myObj
-
-
Nested (Function ํค์๋)
- forEach์ ์ฝ๋ฐฑ ํจ์์์์ this๊ฐ ๋ฉ์๋์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค์ง ๋ชปํ๊ณ ์ ์ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ๋ฆฌํด
- ๋จ์ ํธ์ถ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ํจ์ ํํ์์ด ๋ฐ๋ก
ํ์ดํ ํจ์
const myObj = { numbers: [1], myFunc() { console.log(this) // myObj this.numbers.forEach(function (number) { console.log(number) // 1 console.log(this) // window }) } } myObj.myFunc()
-
Nested (ํ์ดํ ํจ์)
- ์ด์ ์ ์ผ๋ฐ function ํค์๋์ ๋ฌ๋ฆฌ ๋ฉ์๋์ ๊ฐ์ฒด๋ฅผ ์ ๊ฐ๋ฆฌํด
- ํ์ดํ ํจ์์์ this๋ ์์ ์ ๊ฐ์ผ ์ ์ ๋ฒ์
- ์๋์ผ๋ก ํ ๋จ๊ณ ์์์ scope์ context๋ฅผ ๋ฐ์ธ๋ฉ
const myObj = { numbers: [1], myFunc() { console.log(this) // myObj this.numbers.forEach((number) => { console.log(number) // 1 console.log(this) // myObj }) } } myObj.myFunc()
-
- ํ์ดํ ํจ์๋ ํธ์ถ์ ์์น์ ์๊ด์์ด ์์ ์ค์ฝํ๋ฅผ ๊ฐ๋ฆฌํด
- Lexical scope
- ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง๊ฐ ์๋๋ผ
์ด๋์ ์ ์ธ
ํ์๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ - Static scope๋ผ๊ณ ๋ ํ๋ฉฐ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฐ๋ฅด๋ ๋ฐฉ์
- ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง๊ฐ ์๋๋ผ
- ๋ฐ๋ผ์ ํจ์ ๋ด์ ํจ์ ์ํฉ์์ ํ์ดํ ํจ์๋ฅผ ์ฐ๋ ๊ฒ์ ๊ถ์ฅ
- ํ์ง๋ง..
- addEventListener์์์ ์ฝ๋ฐฑ ํจ์๋ ํน๋ณํ๊ฒ function ํค์๋์ ๊ฒฝ์ฐ addEventListener๋ฅผ ํธ์ถํ ๋์์ ๋ปํจ (
event.target
) - ๋ฐ๋ฉด ํ์ดํ ํจ์์ ๊ฒฝ์ฐ ์์ ์ค์ฝํ๋ฅผ ์ง์นญํ๊ธฐ ๋๋ฌธ์ window ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ ๋๋ค
- addEventListener์์์ ์ฝ๋ฐฑ ํจ์๋ ํน๋ณํ๊ฒ function ํค์๋์ ๊ฒฝ์ฐ addEventListener๋ฅผ ํธ์ถํ ๋์์ ๋ปํจ (
- ๊ฒฐ๋ก
- addEventListener์ ์ฝ๋ฐฑ ํจ์๋ function ํค์๋๋ฅผ ์ฌ์ฉํ๊ธฐ
<body>
<button id="function">function</button>
<button id="arrow">arrow function</button>
<script>
const functionButton = document.querySelector('#function')
const arrowButton = document.querySelector('#arrow')
functionButton.addEventListener('click', function(event) {
console.log(this); // <button id="function">function</button>
})
arrowButton.addEventListener('click', event => {
console.log(this); // window
})
</script>
</body>
- ์ด๋ ๊ฒ this๊ฐ ๋ฐํ์์ ๊ฒฐ์ ๋๋ฉด ์ฅ์ ๋ ์๊ณ ๋จ์ ๋ ์์
- ํจ์(๋ฉ์๋)๋ฅผ ํ๋๋ง ๋ง๋ค์ด ์ฌ๋ฌ ๊ฐ์ฒด์์ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์ฅ์ ์ด์ง๋ง, ์ด๋ฐ ์ ์ฐํจ์ด ์ค์๋ก ์ด์ด์ง ์ ์๋ค๋ ๊ฒ์ ๋จ์
- ์๋ต์ด ๋จผ์ ์ค๋ ์์๋๋ก ์ฒ๋ฆฌํ์ง ๋ง๊ณ , ์์ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ฉด ๋์ง ์์๊น?
- JavaScript๋ ํ ๋ฒ์ ํ๋์ ์ผ๋ง ์ํํ๋ Single Thread ์ธ์ด๋ก ๋์์ ์ฌ๋ฌ ์์
์ ์ฒ๋ฆฌํ ์ ์์
- Thread๋?
- ์์ ์ ์ฒ๋ฆฌํ ๋ ์ค์ ๋ก ์์ ์ ์ํํ๋ ์ฃผ์ฒด๋ก, multi-thread๋ผ๋ฉด ์ ๋ฌด๋ฅผ ์ํํ ์ ์๋ ์ฃผ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ ์๋ฏธ
- Thread๋?
- ์ฆ, JavaScript๋ ํ๋์ ์์ ์ ์์ฒญํ ์์๋๋ก ์ฒ๋ฆฌํ ์ ๋ฐ์ ์๋ค!
- Single Thread์ธ JavaScript๊ฐ ์ด๋ป๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์๊น?
- JavaScript Runtime
- Runtime
- ํน์ ์ธ์ด๊ฐ ๋์ํ ์ ์๋ ํ๊ฒฝ
- JavaScript์์ ๋น๋๊ธฐ์ ๊ด๋ จํ ์์ ์ ๋ธ๋ผ์ฐ์ ๋๋ Node ํ๊ฒฝ์์ ์ฒ๋ฆฌ
- ์ด ์ค์์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์์ ๋น๋๊ธฐ ๋์์ ํฌ๊ฒ ์๋์ ์์๋ค๋ก ๊ตฌ์ฑ๋จ
- JavaScript Engine์
Call Stack
Web API
Task Queue
Event Loop
- JavaScript Engine์
-
๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์์ JavaScript์ ๋น๋๊ธฐ๋ ์๋์ ๊ฐ์ด ์ฒ๋ฆฌ๋๋ค.
- ๋ชจ๋ ์์ ์ Call Stack(LIFO)์ผ๋ก ๋ค์ด๊ฐ ํ ์ฒ๋ฆฌ๋๋ค.
- ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด Call Stack์ผ๋ก ๋ค์ด์ค๋ฉด Web API๋ก ๋ณด๋ด์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
- Web API์์ ์ฒ๋ฆฌ๊ฐ ๋๋ ์์ ๋ค์ Task Queue(FIFO)์ ์์๋๋ก ๋ค์ด๊ฐ๋ค.
- Event Loop๊ฐ Call Stack์ด ๋น์ด ์๋ ๊ฒ์ ์ฒดํฌํ๊ณ Task Queue์์ ๊ฐ์ฅ ์ค๋๋ ์์ ์ Call Stack์ผ๋ก ๋ณด๋ธ๋ค.
-
Call Stack
- ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ Stack(LIFO). ๊ธฐ๋ณธ์ ์ธ JavaScript์ Single Thread ์์ ์ฒ๋ฆฌ
-
Web API
- JavaScript ์์ง์ด ์๋ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ runtime ํ๊ฒฝ์ผ๋ก ์๊ฐ์ด ์์๋๋ ์์ ์ ์ฒ๋ฆฌ (setTimeout, DOM event, AJAX ์์ฒญ ๋ฑ)
-
Task Queue
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ Callback ํจ์๊ฐ ๋๊ธฐํ๋ Queue(FIFO)
-
Event Loop
- Call Stack๊ณผ Task Queue๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋ง
- Call Stack์ด ๋น์ด ์๋์ง ํ์ธ ํ ๋น์ด ์๋ค๋ฉด Task Queue์์ ๋๊ธฐ ์ค์ธ ์ค๋๋ ์์ ์ Call Stack ์ผ๋ก Push
- ์ ๋ฆฌ
- JavaScript๋ ํ ๋ฒ์ ํ๋์ ์์ ์ ์ํํ๋ Single Thread ์ธ์ด๋ก ๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ํ์ง๋ง, ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ Web API์์ ์ฒ๋ฆฌ๋ ์์ ์ด ์ง์์ ์ผ๋ก Task Queue๋ฅผ ๊ฑฐ์ณ Event Loop์ ์ํด Call Stack์ ๋ค์ด์ ์์ฐจ์ ์ผ๋ก ์คํ๋จ์ผ๋ก์จ ๋น๋๊ธฐ ์์ ์ด ๊ฐ๋ฅํ ํ๊ฒฝ์ด ๋๋ค.
-
JavaScript์ HTTP ์น ํต์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
-
node ํ๊ฒฝ์ npm์ ์ด์ฉํด์ ์ค์น ํ ์ฌ์ฉํ ์ ์๊ณ ,
browser ํ๊ฒฝ์ CDN์ ์ด์ฉํด์ ์ฌ์ฉํ ์ ์์
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
axios.get('์์ฒญํ URL')
.then(์ฑ๊ณตํ๋ฉด ์ํํ ์ฝ๋ฐฑํจ์)
.catch(์คํจํ๋ฉด ์ํํ ์ฝ๋ฐฑํจ์)
</script>
-
get, post ๋ฑ ์ฌ๋ฌ method ์ฌ์ฉ ๊ฐ๋ฅ
-
then
์ ์ด์ฉํด์ ์ฑ๊ณตํ๋ฉด ์ํํ ๋ก์ง์ ์์ฑ -
catch
๋ฅผ ์ด์ฉํด์ ์คํจํ๋ฉด ์ํํ ๋ก์ง์ ์์ฑ -
Axios ์ค์ต
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <button>์ผ์น</button> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> console.log('๊ณ ์์ด๋ ์ผ์น'); const catImageSearchURL = 'https://api.thecatapi.com/v1/images/search' const btn = document.querySelector('button') btn.addEventListener('click', function() { axios.get(catImageSearchURL) .then((response) => { imgElem = document.createElement('img') imgElem.setAttribute('src', response.data[0].url) document.body.appendChild(imgElem) }) .catch((error) => { console.log('์คํจํ๋ค์น'); }) console.log('์ผ์น์ผ์น'); }) </script> </body> </html>
-
์ ๋ฆฌ
- axios๋ ๋น๋๊ธฐ๋ก ๋ฐ์ดํฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ฐ์ ๋ฐฉ์์ผ๋ก Django REST API๋ก ์์ฒญ์ ๋ณด๋ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ ํ ์ฒ๋ฆฌํ ์ ์์
-
๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํต์ฌ์ Web API๋ก ๋ค์ด์ค๋ ์์๊ฐ ์๋๋ผ
์์ ์ด ์๋ฃ๋๋ ์์์ ๋ฐ๋ผ ์ฒ๋ฆฌ
ํ๋ค๋ ๊ฒ! -
๊ฐ๋ฐ์ ์ ์ฅ์์ ์ฝ๋์ ์คํ ์์๊ฐ ๋ถ๋ช ํํ๋ค๋ ๋จ์ ์ด ์์
-
์ด๋ป๊ฒ ํด๊ฒฐํ ๊น?
โ
์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ์!!!
-
๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋๋ ํจ์
๋ฅผ ์ฝ๋ฐฑ ํจ์๋ผ๊ณ ํ๋ค.- ๋น๋๊ธฐ์๋ง ์ฌ์ฉ๋๋ ํจ์๊ฐ ์๋๋ฉฐ ๋๊ธฐ, ๋น๋๊ธฐ ์๊ด์์ด ์ฌ์ฉ ๊ฐ๋ฅ
- ์๊ฐ์ด ๊ฑธ๋ฆฌ๋
๋น๋๊ธฐ ์์ ์ด ์๋ฃ๋ ํ ์คํํ ์์ ์ ๋ช ์ํ๋ ๋ฐ ์ฌ์ฉ
๋๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋น๋๊ธฐ ์ฝ๋ฐฑ (asynchronous callback) ์ด๋ผ ๋ถ๋ฆ
const btn = document.querySelector('button')
btn.addEventListener('click', () => {
alert('Completed')
})
- ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๋ช ์์ ์ธ ํธ์ถ์ด ์๋ ํน์ ํ ์กฐ๊ฑด ํน์ ํ๋์ ์ํด ํธ์ถ๋๋๋ก ์์ฑํ ์ ์์
- โ์์ฒญ์ด ๋ค์ด์ค๋ฉดโ, โ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉดโ, โ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ฉดโ ๋ฑ์ ์กฐ๊ฑด์ผ๋ก ์ดํ ๋ก์ง์ ์ ์ดํ ์ ์์
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์ํ ์ ์๊ฒ ํจ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ใด ์ฝ๋ฐฑ ํจ์์ ํํ๊ฐ ๋ฐ๋์ ํ์ํจ
- ์ฝ๋ฐฑ ํจ์๋ ๋น๋๊ธฐ ์์
์ ์์ฐจ์ ์ผ๋ก ์คํํ ์ ์๊ฒ ํ๋ ๋ฐ๋์ ํ์ํ ๋ก์ง์ด์ง๋ง, ์ฝ๋ฐฑ ์ง์ฅ์ ๋ฐ๋์ ๋ํ๋๋ ๋ฌธ์
- ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํด์นจ
- ์ ์ง ๋ณด์๊ฐ ์ด๋ ค์
- Callback Hell ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ์ฒด
- โ์์ ์ด ๋๋๋ฉด ์คํ์์ผ์ค๊ฒโ๋ผ๋ ์ฝ์(promise)
๋น๋๊ธฐ ์์ ์ ์๋ฃ ๋๋ ์คํจ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
- Promise ๊ธฐ๋ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ก ์ด์ ์ ์ฌ์ฉํ Axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ฑ๊ณต์ ๋ํ ์ฝ์
then()
- ์คํจ์ ๋ํ ์ฝ์
catch()
- ์ฑ๊ณต์ ๋ํ ์ฝ์
then(callback)
- ์์ฒญํ ์์ ์ด ์ฑ๊ณตํ๋ฉด callback ์คํ
- callback์ ์ด์ ์์ ์ ์ฑ๊ณต ๊ฒฐ๊ณผ๋ฅผ ์ธ์๋ก ์ ๋ฌ ๋ฐ์
catch(callback)
- then()์ด ํ๋๋ผ๋ ์คํจํ๋ฉด callback ์คํ
- callback์ ์ด์ ์์ ์ ์คํจ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌ ๋ฐ์
- then๊ณผ catch ๋ชจ๋ ํญ์ promise ๊ฐ์ฒด๋ฅผ ๋ฐํ. ์ฆ, ๊ณ์ํด์ chaining์ ํ ์ ์์
axios๋ก ์ฒ๋ฆฌํ ๋น๋๊ธฐ ๋ก์ง์ด ํญ์ promise ๊ฐ์ฒด๋ฅผ ๋ฐํ
. ๊ทธ๋์ then์ ๊ณ์ ์ด์ด ๋๊ฐ๋ฉด์ ์์ฑํ ์ ์์๋ ๊ฒ
// promise ๋ฐฉ์
work1()
.then((result1) => {
// work2
return result2
})
.then((result2) => {
// work3
return result3
})
.catch((error) => {
// error handling
})
- promise ๋ฐฉ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ง์น ์ผ๋ฐ์ ์ผ๋ก ์์์ ์๋๋ก ์ ๋ ๋ฐฉ์์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์
- ๋น๋๊ธฐ ์ฝ๋ฐฑ ์์ฑ ์คํ์ผ๊ณผ ๋ฌ๋ฆฌ Promise๊ฐ ๋ณด์ฅํ๋ ํน์ง
- callback ํจ์๋ JavaScript์ Event Loop๊ฐ ํ์ฌ ์คํ ์ค์ธ Call Stack์ ์๋ฃํ๊ธฐ ์ด์ ์๋ ์ ๋ ํธ์ถ๋์ง ์์
- Promise callback ํจ์๋ Event Queue์ ๋ฐฐ์น๋๋ ์๊ฒฉํ ์์๋ก ํธ์ถ๋จ
- ๋น๋๊ธฐ ์์ ์ด ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ ๋ค์ .then() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ถ๊ฐํ ๊ฒฝ์ฐ์๋ 1๋ฒ๊ณผ ๋๊ฐ์ด ๋์
- .then() ์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ callback ํจ์๋ฅผ ์ถ๊ฐํ ์ ์์ (Chaining)
- ๊ฐ๊ฐ์ callback์ ์ฃผ์ด์ง ์์๋๋ก ํ๋ํ๋ ์คํํ๊ฒ ๋จ
- Chaining์ Promise์ ๊ฐ์ฅ ๋ฐ์ด๋ ์ฅ์
- ๋น๋๊ธฐ ํต์ ์ ์ด์ฉํ์ฌ ํ๋ฉด ์ ์ฒด๋ฅผ ์๋ก๊ณ ์นจ ํ์ง ์์๋ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ๋ฉด์ ์ผ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ ๊ฐ๋ฅ
- ์ด๋ฌํ โ๋น๋๊ธฐ ํต์ ์น ๊ฐ๋ฐ ๊ธฐ์ โ์ Asynchronous Javascript And XML(AJAX) ๋ผ ํจ
AJAX์ ํน์ง
- ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์๋ฒ์ ์์ฒญ
- ์๋ฒ๋ก๋ถํฐ ์๋ต(๋ฐ์ดํฐ)๋ฅผ ๋ฐ์ ์์ ์ ์ํ
- ์ด๋ฌํ ๋น๋๊ธฐ ์น ํต์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๊ฐ Axios
- Ecma International์ด ECMA-262 ๊ธฐ์ ๊ท๊ฒฉ์ ๋ฐ๋ผ ์ ์ํ๊ณ ์๋ ํ์คํ๋ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
ES6
๋ 2015๋ ,ES5
๋ 2009๋ ์ ์ถ์ (์ซ์๋ ๋ฒ์ ์ ์๋ฏธํจ)
- let
- ๋ธ๋ก์ค์ฝํ, ์ฌํ ๋น ๊ฐ๋ฅ, ์ฌ์ ์ธ ๋ถ๊ฐ
- ๋ณ์ ์ ์ธ ํค์๋
- const
- ๋ธ๋ก์ค์ฝํ, ์ฌํ ๋น ๋ถ๊ฐ, ์ฌ์ ์ธ ๋ถ๊ฐ
- ์์ ์ ์ธ ํค์๋
- ``(back tick) ์ผ๋ก ์ฌ์ฉ
${}
ํ์์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ฌ์ฉ ๊ฐ๋ฅ
// ES5 ๋ฌธ๋ฒ์ผ๋ก Hello, World! ์ถ๋ ฅํ๊ธฐ
var str1 = ', ';
var str2 = 'World!';
var str3 = 'Hello' + str1 + str2;
// ES6 ๋ฌธ๋ฒ์ผ๋ก Hello, World! ์ถ๋ ฅํ๊ธฐ
let str1 = ', ';
let str2 = 'World!';
let str3 = `Hello${str1} ${str2}`;
๐ฅ ๊ฐ์ฒด
- ๊ฐ์ฒด๋ JavaScript์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐฉ์ ์ค ํ๋
- key, value ์์ผ๋ก ๊ตฌ์ฑ๋จ
let example = {
'name': '๋ฐ์ํ',
'age': 20
}
// ํ๋กํผํฐ : 'name': '๋ฐ์ํ' ๊ณผ 'age': 20
// ํค (key) : ํ๋กํผํฐ ๋ช
// ๊ฐ (value) : ํ๋กํผํฐ ๊ฐ
-
JavaScript๋ prototype ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก, ๋ค์ํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ ์ง์
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด
- Object ์์ฑ์ ํจ์
- ์์ฑ์ ํจ์
- Object.create ๋ฉ์๋
- ํด๋์ค (ES6)
-
๊ฐ์ฒด ๋ฆฌํฐ๋ด
-
๊ฐ์ฒด ์์ฑ ๋ฐฉ์ ์ค ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๊ฐ๋จํจ
- ์ปจํ ์ธ ๋ฅผ ๊ทธ๋๋ก ๋์ ํ๋ ๋ฐฉ๋ฒ
-
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ ํตํด Person์ด๋ ๊ฐ์ฒด ์์ฑํด๋ณด๋ฉด
let person = { name: ['Sihyun', 'Park'], age: 29, gender: 'male', interests: ['music', 'movie'], introduce: function() { console.log(`${this.name[0]} ${this.name[1]} is ${this.age} years old`); }, greeting: function() { console.log(`Hi! I'm ${this.name[0]}.`); } };
- ์ ๊ฐ์ฒด์์
introduce
์greeting
์ ํจ์. ๊ฐ์ฒด๋ property๋ก ์ผ๋ฐ ๋ณ์ ๋ฟ๋ง ์๋๋ผ ํจ์ ๋ํ ๊ฐ์ง ์ ์์- ์ด ํจ์๋ฅผ
๋ฉ์๋
๋ผ๊ณ ํํ!! (๋ฉ์๋๋ ๊ฐ์ฒด์ ๋ฌถ์ธ ํจ์)
- ์ด ํจ์๋ฅผ
- ์ ๊ฐ์ฒด์์
-
-
ํ๋กํผํฐ ์ ๊ทผ
-
์ ์ธํ ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง
- ๋ง์นจํ ํ๊ธฐ๋ฒ
person.name
,person.age
์ ๊ฐ์ด ์ ๊ทผ
- ๋๊ดํธ ํ๊ธฐ๋ฒ
person['name']
,person['age']
์ ๊ฐ์ด ์ ๊ทผ- ์ด ๊ฒฝ์ฐ โโ(๋ฐ์ดํ) ์์ ๊ฐ์ธ์ฃผ์ง ์์ผ๋ฉด name์ด๋ ๋ณ์์ ๊ฐ์ผ๋ก ์ธ์ํ๋ฏ๋ก ๊ผญ ๊ฐ์ธ๊ธฐ
- ๋ง์นจํ ํ๊ธฐ๋ฒ
-
๋ฉ์๋๋ ๋์ผ
person.introduce() // Sihyun Park is 29 years old. person.greeting() // Hi! I'm Sihyun.
-
-
ํ๋กํผํฐ ๊ฐ ๊ฐฑ์
- ์ด๋ฏธ ์กด์ฌํ๋ property์ ๊ฐ์ ์์ ํ๋ฉด ๊ฐฑ์ ๋จ
person.name = 'Gyuri'
-
ํ๋กํผํฐ ๊ฐ ์์ฑ
- ์กด์ฌํ์ง ์๋ property์ ๊ฐ์ ํ ๋นํ๋ฉด ํ๋กํผํฐ๊ฐ ๋์ ์ผ๋ก ์์ฑ๋จ
person.address = 'Suwon'
-
ํ๋กํผํฐ ๊ฐ ์ญ์
- ์ญ์ ํ๊ณ ์ ํ๋ property๋ฅผ delete ํค์๋ ๋ถ์ฌ ์ฌ์ฉ
- ์๋ property์ ์ ๊ทผ ์ ์๋ฌ ์์ด ๋ฌด์๋จ
delete person.age
-
๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ ๋ฆฌ
- ์ด์ ๋ณด๋ค ํจ์ฌ ๊ฐ๊ฒฐํด์ง ์ฝ๋๋ก ๊ฐ์ฒด ์ ์ธ
- ๋ฉ์๋์ :(์ฝ๋ก ) ์ด๋ function์ ๋ถ์ด์ง ์์๋ ๋จ
- ํจ์๋ช ์ด ๊ฒน์น๋ ๊ฒฝ์ฐ ํ ๋ฒ๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ค๋ฉด ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐ์์ [text + 1]๊ณผ ๊ฐ์ด ์ ์ธํ์ด์ผ ํ๋๋ฐ, ES6๋ถํฐ๋ ๊ฐ์ฒด ์์์ ๋ฐ๋ก ์์ฑ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
const myFunc = function() { console.log('myFunc') } const text = 'TEXT' const obj = { inside() { console.log('๊ฐ์ฒด ์์ ๋ฐ๋ก ํจ์ ์ ์ธ') }, myFunc, [text + 1]: '๋ฐ์ํ' } obj.inside() // ์ถ๋ ฅ๊ฐ : ๊ฐ์ฒด ์์ ๋ฐ๋ก ํจ์ ์ ์ธ obj.myFunc() // ์ถ๋ ฅ๊ฐ : myFunc console.log(obj.TEXT1) // ์ถ๋ ฅ๊ฐ : ๋ฐ์ํ
- ํจ์ ํํ์์ ํ์ดํ ํจ์๋ก ํํ ๊ฐ๋ฅ
- ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ํ๋ผ ์ ์๊ฒ ๋์ด ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ์์น
- ํจ์์ ๋ณธ๋ฌธ(body)์ return๋ง ์๋ ๊ฒฝ์ฐ ํ์ดํ ํจ์๋ return๊ณผ {}๋ฅผ ์๋ต ๊ฐ๋ฅ(๋จ, ๊ฐ์ด ์๋ตํด์ผํจ)
- return ๋ฌธ์์ ์๊ดํธ๋ ์ฌ์ฉ ๊ฐ๋ฅ
// ES5
function plusFunc(a, b) {
return a + b
}
// ES6
// ํจ์ ํํ์ (ํ์ดํ ํจ์)
const plusFunc = (a, b) => {
return a + b
}
// ํจ์ ํํ์ (ํ์ดํ ํจ์, ์๋ตํ)
const plusFunc = (a, b) => a + b
- ๊ฐ์ฒด๋ ๋ฐฐ์ด์์ ์ฌ์ฉ
- ๊ฐ์ ํด์ฒดํ ํ ๊ฐ๋ณ ๊ฐ์ ๋ณ์์ ์๋ก ํ ๋นํ๋ ๊ณผ์
// ๋ฐฐ์ด์์ ์ฌ์ฉ
const arr = [1, 2, 3]
const [one, two, three] = arr
one // 1
two // 2
three // 3
////////////////////////////////////
// ๊ฐ์ฒด์์ ์ฌ์ฉ
const obj = {
firstName: '์ํ',
lastName: '๋ฐ'
}
const { firstName, lastName } = obj
firstName // ์ํ
lastName // ๋ฐ
- JavaScript์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ์กด์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ ์ฝ๋ฐฑ ํจํด์ผ๋ก ํจ
- ์ด๋ ์ฝ๋ฐฑ์ง์ฅ ๋ฐ์์ํด
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Promise ๋์
- Promise ํ์์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํด ํจ์จ์ ์๋ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- JavaScript๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด
- ํด๋์ค ๊ธฐ๋ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅํ๋๋ก Class ํค์๋ ๋์
- JavaScript์์ Class๋ ๋ด๋ถ์ ์ผ๋ก ํ๋กํ ํ์ ์ ์ด์ฉํด ๋ง๋ค์ด์ง
- ํธ์ด์คํ
์ด
let
,const
ํค์๋์ฒ๋ผ ๋์
- includes : ํฌํจ ์ฌ๋ถ
- startsWith : ์์ํ๋์ง
- endsWith : ๋๋๋์ง
- boolean ํ์ ์ return ํจ
const str = 'Hello World Sihyun'
str.includes("Sihyun") // true
str.startsWith("Hello") // true
str.endsWith("yun") // true
- ๊ณผ๊ฑฐ์ ๋ฌธ์์ด์ด ๋ผ์ธ์ ๋์ด๊ฐ๋ค๋ฉด
\\n
๊ณผ๋ง์ ์ฐ์ฐ์
ํ์ํ์
// ES5
var str = 'asdhasfhfsahsfhfshasfhsfahsfahsfahasfh.\\n' +
'mxmxmxmxmxmxmxmmxmxmxmxmxmmxmxmxmxmxm.\\n'
- ๋ฐฑํฑ์ ์ฌ์ฉํ๊ฒ ๋๋ฉฐ ์ฌ๋ฌ ์ค์ ๋ฌธ์์ด ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด์ง
// ES6
let str = `asdhasfhfsahsfhfshasfhsfahsfahsfahasfh
mxmxmxmxmxmxmxmmxmxmxmxmxmmxmxmxmxmxm`;
-
ํจ์์ ๋งค๊ฐ๋ณ์ ์ด๊ธฐํ
- ๊ธฐ์กด์๋ ๋ด๋ถ ์์ ์ด ํ์
- ES6์์๋ ํ์ํ์ง ์์
// ES5 function myFunc(a, b) { var a = a || 100 var b = b || 200 return a + b } console.log(myFunc(100)) // 300 // ES6 const myFunc = ( a = 100, b = 200 ) => a + b console.log(myFunc()) // 300
- ๋ชจ๋์ด๋?
- ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ์ฝ๋ ์กฐ๊ฐ
- ์ธ๋ถ์ฌํญ์ ์บก์ํ, API ๋ถ๋ถ๋ง ์ธ๋ถ์ ๋ ธ์ถ
- type์ module์ ์ถ๊ฐ์ํค๊ณ ํ์ฅ์๋ฅผ mjs๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉ
- ๋ชจ๋์ ๋ชจ๋ ์ค์ฝํ ๊ฐ์ง๋ฉฐ, import์ export ํค์๋๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ
<script type="module" src="lib.mjs"></script>