์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์๋ฐ์คํฌ๋ฆฝํธ#์กฐ๊ฑด๋ฌธ#๋ฌธ์์ด
- ๋ด์ฅ๊ณ ์ฐจํจ์
- redux์ํ์ ์ง
- toString#String
- JS#3์ผ์ฐจ๋ฌ๋ฆฌ์#์ด๋ฐ์ธ๋ฐ#์๊ฐ๊ธ๋ฐฉ~
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#var#let#const#undefined#null
- https://www.daleseo.com/js-array-slice-splice/
- https://developer-talk.tistory.com/299
- cmarket
- CSS
- slice/splice/split
- UI
- https://dasima.xyz/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%9C%EA%B3%B1-math-pow-%EA%B3%84%EC%82%B0/
- User Flow
- for~in/for~of
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#slice#splice
- children vs childrenNodes
- Beesbeesbees
- dom
- ใทใ
- variable#function
- removeCookie
- https://lo-victoria.com/introduction-to-redux-toolkit-for-beginners
- UX
- ๋ ธ๋๊ต๊ณผ์
- js
- ํท๊ฐ๋ฆฐ๋ค~
- react
- @redux-toolkit
- Today
- Total
Daily Front_Minhhk
[JS] koans ๋ณต์ต[(์๋ฌต,๋ช ์)ํ์ ๋ณํ, ํธ์ด์คํ , ํ์ดํํจ์, …etc] ๋ณธ๋ฌธ
[JS] koans ๋ณต์ต[(์๋ฌต,๋ช ์)ํ์ ๋ณํ, ํธ์ด์คํ , ํ์ดํํจ์, …etc]
Minhhk 2022. 11. 9. 15:30๐ ๋ญ๊ฐ ์ฅํฉํ๊ฒ ๋์ดํ๊ฑฐ ๊ฐ์๋ฐ,, ๋๋ฆ ํท๊ฐ๋ ธ๋ ๊ฒ ์์ฃผ๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค!
์๊ฐ๋ณด๋ค ์๊ณ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ ๊ฒ๋ค์ด ์คํ๋ ค ๋ค์ด๊ฐ์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋
๋๋ ์ ๋๋ก ์๊ณ ์๋ ๊ฒ์ด ์๋์๊ณ , ์๋ค๊ณ ์ฐฉ๊ฐํ๊ณ ๋์ถฉ ์ฐ๊ณ ์์๋คใ ใ ใ
์ ์ ์ฐจ๋ฆฌ๊ณ ~~ ์ฐจ๊ทผํ ๋ค์ ํ๋ฉด ๋๋๊น ๋ใ กใ ก๊ฐ์!!
์๋ฌต์ ํ์ ๋ณํ(Implicit coercion) || ํ์ ๊ฐ์ ๋ณํ(Type coercion)
let a = 1
let b = true
console.log(a+b) // 2
typeof(a+b) // 'number'
let a = 1
let b = '1'
console.log(a+b) // 11
typeof(a+b) // 'string'
let a = 12
let b = '1'
// + ์ ์ธํ -, *, / ๋ ๋๋ฒ๋ก ์ธ์ํ์ฌ ๊ณ์ฐ -> ๋์ถ
console.log(a-b) // 11
typeof(a-b) // 'number'
// ์คํธ๋ง์ด๋ฉด ์คํธ๋ง ๋ฐํ
let a = '12'
let b = true
console.log(a+b) // 12true
typeof(a+b) // 'string'
---
let a = true
let b = '12'
console.log(a+b) // true12
typeof(a+b) // 'string'
---
// ์ซ์๋ฉด ์ซ์ ๋ฐํ
let a = 12
let b = true
console.log(a+b) // 13
typeof(a+b) // 'number'
์ต๋ํ ๊ฐ์ ํ์ ๋ผ๋ฆฌ ์ฐ์ฐ์ ํ๊ณ , ์ฆ ์๊ฒฉํ ๋์น ์ฐ์ฐ('===')์ ์ฌ์ฉํ๊ณ , ์กฐ๊ฑด๋ฌธ์ ๋น๊ต ์ฐ์ฐ์ ๋ช ์ํ๋ ๊ฒ์ด ํจ์ฌ ์ข๋ค.
// ๋
ผ๋ฆฌํฉ(||) ์ฐ์ฐ์
// ๋
ผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํ ์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์์ ํ๊ฐ ๊ฒฐ๊ณผ ์ฆ, ๋ฌธ์์ด ‘Cat’๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค.
'Cat' || 'Dog' // 'Cat'
false || 'Dog' // 'Dog'
'Cat' || false // 'Cat'
// ๋
ผ๋ฆฌ๊ณฑ(&&) ์ฐ์ฐ์
// ๋
ผ๋ฆฌ๊ณฑ ์ฐ์ฐ์ &&๋ ๋
ผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํ ๋๋ฒ์งธ ํผ์ฐ์ฐ์์ ํ๊ฐ ๊ฒฐ๊ณผ ์ฆ, ๋ฌธ์์ด ‘Dog’๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค.
'Cat' && 'Dog' // Dog
false && 'Dog' // false
'Cat' && false // false
๋ช ์์ ํ์ ๋ณํ
- ์คํธ๋ง ๋ณํ
// 1. String ์์ฑ์ ํจ์๋ฅผ new ์ฐ์ฐ์ ์์ด ํธ์ถํ๋ ๋ฐฉ๋ฒ
// ์ซ์ ํ์
=> ๋ฌธ์์ด ํ์
console.log(String(1)); // "1"
console.log(String(NaN)); // "NaN"
console.log(String(Infinity)); // "Infinity"
// ๋ถ๋ฆฌ์ธ ํ์
=> ๋ฌธ์์ด ํ์
console.log(String(true)); // "true"
console.log(String(false)); // "false"
// 2. Object.prototype.toString ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
// ์ซ์ ํ์
=> ๋ฌธ์์ด ํ์
console.log((1).toString()); // "1"
console.log((NaN).toString()); // "NaN"
console.log((Infinity).toString()); // "Infinity"
// ๋ถ๋ฆฌ์ธ ํ์
=> ๋ฌธ์์ด ํ์
console.log((true).toString()); // "true"
console.log((false).toString()); // "false"
- ์ซ์ํ ๋ณํ
// 1. Number ์์ฑ์ ํจ์๋ฅผ new ์ฐ์ฐ์ ์์ด ํธ์ถํ๋ ๋ฐฉ๋ฒ
// ๋ฌธ์์ด ํ์
=> ์ซ์ ํ์
console.log(Number('0')); // 0
console.log(Number('-1')); // -1
console.log(Number('10.53')); // 10.53
// ๋ถ๋ฆฌ์ธ ํ์
=> ์ซ์ ํ์
console.log(Number(true)); // 1
console.log(Number(false)); // 0
// 2. parseInt, parseFloat ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ(๋ฌธ์์ด๋ง ๋ณํ ๊ฐ๋ฅ)
// ๋ฌธ์์ด ํ์
=> ์ซ์ ํ์
console.log(parseInt('0')); // 0
console.log(parseInt('-1')); // -1
console.log(parseFloat('10.53')); // 10.53
- ๋ถ๋ฆฌ์ธํ์ ๋ณํ
// 1. Boolean ์์ฑ์ ํจ์๋ฅผ new ์ฐ์ฐ์ ์์ด ํธ์ถํ๋ ๋ฐฉ๋ฒ
// ๋ฌธ์์ด ํ์
=> ๋ถ๋ฆฌ์ธ ํ์
console.log(Boolean('x')); // true
console.log(Boolean('')); // false
console.log(Boolean('false')); // true
// ์ซ์ ํ์
=> ๋ถ๋ฆฌ์ธ ํ์
console.log(Boolean(0)); // false
console.log(Boolean(1)); // true
console.log(Boolean(NaN)); // false
console.log(Boolean(Infinity)); // true
// null ํ์
=> ๋ถ๋ฆฌ์ธ ํ์
console.log(Boolean(null)); // false
// undefined ํ์
=> ๋ถ๋ฆฌ์ธ ํ ์
console.log(Boolean(undefined)); // false
// ๊ฐ์ฒด ํ์
=> ๋ถ๋ฆฌ์ธ ํ์
console.log(Boolean({})); // true
console.log(Boolean([])); // true
ํธ์ด์คํ ์ด๋
ํธ์ด์คํ (Hoisting)์ ๊ฐ๋ ํจ์ ์์ ์๋ ์ ์ธ๋ค์ ๋ชจ๋ ๋์ด์ฌ๋ ค์ ํด๋น ํจ์ ์ ํจ ๋ฒ์์ ์ต์๋จ์ ์ ์ธํ๋ ๊ฒ์ ๋งํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ์คํ๋๊ธฐ ์ ์ ํจ์ ์์ ํ์ํ ๋ณ์๊ฐ๋ค์ ๋ชจ๋ ๋ชจ์์ ์ ํจ ๋ฒ์์ ์ต์๋จ์ ์ ์ธํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ Parser๊ฐ ํจ์ ์คํ ์ ํด๋น ํจ์๋ฅผ ํ ๋ฒ ํ๋๋ค. ํจ์ ์์ ์กด์ฌํ๋ ๋ณ์/ํจ์์ ์ธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ค๊ฐ ์คํ์ํจ๋ค. ์ ํจ ๋ฒ์: ํจ์ ๋ธ๋ก {} ์์์ ์ ํจ
- ์ฆ, ํจ์ ๋ด์์ ์๋์ชฝ์ ์กด์ฌํ๋ ๋ด์ฉ ์ค ํ์ํ ๊ฐ๋ค์ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ด๋ค. ์ค์ ๋ก ์ฝ๋๊ฐ ๋์ด์ฌ๋ ค์ง๋ ๊ฑด ์๋๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ Parser ๋ด๋ถ์ ์ผ๋ก ๋์ด์ฌ๋ ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ค์ ๋ฉ๋ชจ๋ฆฌ์์๋ ๋ณํ๊ฐ ์๋ค.
ํจ์ ์ ์ธ์์ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ์ง๋ง, ํจ์ ํํ์์ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
// ์คํ ์
logMessage();
sumNumbers();
function logMessage() {
return 'worked';
}
var sumNumbers = function () {
return 10 + 20;
};
// ์คํ ์
function logMessage() {
return 'worked';
}
var sumNumbers;
logMessage(); // 'worked'
sumNumbers(); // Uncaught TypeError: sumNumbers is not a function
sumNumbers = function () {
return 10 + 20;
};
TIP ํธ์ด์คํ ์ฌ์ฉ ์ ์ฃผ์
- ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์๋ฅผ ์ํด ํธ์ด์คํ ์ด ์ผ์ด๋์ง ์๋๋ก ํ๋ค. ํธ์ด์คํ ์ ์ ๋๋ก ๋ชจ๋ฅด๋๋ผ๋ ํจ์์ ๋ณ์๋ฅผ ๊ฐ๊ธ์ ์ฝ๋ ์๋จ๋ถ์์ ์ ์ธํ๋ฉด, ํธ์ด์คํ ์ผ๋ก ์ธํ ์ค์ฝํ ๊ผฌ์ ํ์์ ๋ฐฉ์งํ ์ ์๋ค. let/const๋ฅผ ์ฌ์ฉํ๋ค.
- var๋ฅผ ์ฐ๋ฉด ํผ๋์ค๋ฝ๊ณ ์ธ๋ชจ์๋ ์ฝ๋๊ฐ ์๊ธธ ์ ์๋ค. ๊ทธ๋ผ ์ var์ ํธ์ด์คํ ์ ์ดํดํด์ผ ํ ๊น? ES6๋ฅผ ์ด๋์์๋ ์ธ ์ ์์ผ๋ ค๋ฉด ์์ง ์๊ฐ์ด ๋ ํ์ํ๋ฏ๋ก ES5๋ก ํธ๋์ค์ปดํ์ผ์ ํด์ผํ๋ค. ๋ฐ๋ผ์ ์์ง์ var๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๊ณ ์์ด์ผ ํ๋ค.
โ (ํธ์ด์คํ ํฌ์คํธ ์ฐธ๊ณ !) https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html
๐ ๊น์๋ณต์ฌ๋ผ๋๊ฑด ์ฃผ์๊ฐ์ ๊ฐ์ ธ์ค๋๊ฒ ์๋๋ผ ๊ทธ ๊ฐ ์์ฒด๋ง ๊ฐ์ ธ์ค๋๊ฒ์ด๋ค.
arr1 = [1,2,3,4]; let arr3 = [...arr1]; ์ผ๋ก ๋ณต์ฌํ๋ฉด?
arr3์ ๊ฑด๋๋ ค๋ arr1์ ์ํฅ์ ๋ฐ์ง ์๋๋ค → ์๋ํ๋ฉด arr1๊ณผ arr3์ ์ฃผ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฃผ์๊ฐ์ ๋์ด์ ์์๋ง ๋ณต์ฌํ๋๊ฑธ ๊น์๋ณต์ฌ
์ฃผ์๊ฐ์ ๊ฐ์ ธ์ค๋๊ฒ์ ์์๋ณต์ฌ
Object.assign()
์ ๊ฐ์ฐ์ฐ์ ...???
๊ฐ์ฒด์ ํ๋จ๊ณ๊น์ง์ ๊น์๋ณต์ฌ๋ง ๊ฐ๋ฅํ๊ณ ,
๊ทธ ์ด์์ depth๋ถํฐ๋ ์ฌ์ ํ ์์๋ณต์ฌ๊ฐ ์ผ์ด๋๋ค,,
ํ์ดํ ํจ์ , let func = ( ) ⇒ { }
// ํจ์ ํํ์
function () {
const add = function (x, y) {
return x + y
}
// ํ์ดํ ํจ์
const add = (x, y) => {
return x + y
}
console.log(add(1,2)) // 3
// ๋ฆฌํด์ ์๋ต ๊ฐ๋ฅ
const subtract = (x, y) => x - y
// ํ์์ ๋ฐ๋ผ ์๊ดํธ๋ฅผ ๋ถ์ผ ์๋ ์๋ค.
const multiply = (x, y) => (x * y)
// ํ๋ผ๋ฏธํฐ๊ฐ ํ๋์ผ ๊ฒฝ์ฐ ์๊ดํธ ์๋ต์ด ๊ฐ๋ฅ!
const divideBy10 = x => x / 10
// 'ํ์ดํ ํจ์๋ฅผ ์ด์ฉํด ํด๋ก์ ๋ฅผ ํํ
// 1
const adder = x => {
return y => {
return x + y
}
}
// 2
const subtractor = x => y => {
return x - y
}
์์์๋ฃํ, ์ฐธ์กฐ์๋ฃํ
let num = 123;
const msg = "hello";
let arr = [1, 2, 3];
const isOdd = true;
์์ ์๋ฃํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ (stack)
1 | num | 123
2 | msg | "hello"
3 | arr | heap์ 12๋ฒ๋ถํฐ 3๊ฐ // (์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ์ฃผ์)
4 |isOdd| true
=====================================
Object ์๋ฃํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ (heap)
10 ||
11 ||
12 || 1
13 || 2
14 || 3
์ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์๋ฅผ ์์ ๊ฐ์ด ์ ์ฅ
---
์์ ์๋ฃํ์ด ํ ๋น๋๋ ๊ฒฝ์ฐ๋ ๊ฐ ์์ฒด๊ฐ ํ ๋น๋๊ณ ,
์ฐธ์กฐ ์๋ฃํ์ ์ฃผ์๊ฐ ํ ๋น๋๋ค๊ณ ์๊ธฐํ์
๋ ์ข์ต๋๋ค.
const hello = "world"; // "world" ๊ทธ ์์ฒด
const arr = [1, 2, 3]; // [1, 2, 3] ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ xxxxxx
๋ ์์ปฌ ์ค์ฝํ (Lexical scope)
- ๋ณ์์ ํจ์๋ฅผ ํ๋กํผํฐ๋ก ์ ์ฅํ๋ ๊ฐ์ฒด
- ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง๊ฐ ์๋๋ผ ์ด๋์ ์ ์ธํ์๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ ๊ฒ์ ๋งํ๋ค.
- ์ฆ, ํจ์๋ฅผ ์ด๋์ ์ ์ธํ์๋์ง์ ๋ฐ๋ผ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค๋ ๋ป์ด๋ฉฐ, ๊ฐ์ฅ ์ค์ํ ์ ์ ํจ์์ ํธ์ถ์ด ์๋๋ผ ํจ์์ ์ ์ธ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค๋ ์ ์ด๋ค.
- ๋ค๋ฅธ ๋ง๋ก, ์ ์ ์ค์ฝํ๋ผ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
https://developer-alle.tistory.com/407 // ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช ใฑใฑ
ํด๋ก์ (closure)
- ํด๋ก์ ๋ ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋์์ ๋์ ๋ ์์ปฌ ํ๊ฒฝ(Lexical environment)๊ณผ์ ์กฐํฉ์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ด๋ถ ํจ์๊ฐ ์ธ๋ถ(enclosing) ํจ์ ๋ณ์์ ์ก์ธ์ค(์ ๊ทผ) ํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ฅ์ ๋งํ๋ค.
- ์ธ๋ถ ํจ์ ๋ฐ์์ ๋ด๋ถ ํจ์๊ฐ ํธ์ถ๋๋๋ผ๋ ์ธ๋ถ ํจ์์ ์ง์ญ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค. ๊ทธ ์ด์ ๋ ์์ ์ด ์์ฑ๋ ๋์ ํ๊ฒฝ(Lexical environment)์ ๊ธฐ์ตํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ์ ์ด๋ฌํ ํจ์๋ฅผ ํด๋ก์ (Closure)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
this
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ์ธํ ๋ ๊ฐ์ด ๊ฒฐ์ ๋๋ ๊ฒ์ด ์๋๋ฐ ๊ทธ๊ฒ์ ํด๋ก์ ๋ผ๊ณ ํ๊ณ , ๋ฐ๋ฉด ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ํด์ ๊ฐ์ด ๊ฒฐ์ ๋๋ ๊ฒ์ด ๋ฐ๋ก this์ด๋ค.
- this๊ฐ ๋ฐ๋ก ํธ์ถํ ๋ ๊ฒฐ์ ๋๋ ๊ฒ์ด๊ณ , ํธ์ถํ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก this์ด๋ค.
๐ฉ๐ป๐ slice() ์์ ์ด๊ณผํ ์ธ๋ฑ์ค๋ฉด ๋น๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค. slice(0);๋ฅผ ํ๋ฉด ๋ณต์ฌ๊ฐ ๋๋ค. ⇒ ์์ ์๋ก์ด ์ฃผ์์ ๋ฐฐ์ด์ด ๋์จ๋ค.
๐ const{name} = student ๋ const name = student.name ์ด๊ฑด ํค๊ฐ ๊ฐ์ ธ์ค๋ ๋ฌธ๋ฒ์ด๋ค
โ ๊ฐ์ฒด๋ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ค๋ฉด?
⇒ ๊ฐ์ฒด์ ํค์ ๊ธธ์ด๋ฅผ ๊ตฌํด์ผํจ!
⇒ Object.keys(obj)
⇒ ํค๊ฐ์ ๋ฐฐ์ด๋ก ์ถ๋ ฅ
⇒ Object.values(obj)
⇒ ๋ฒจ๋ฅ๊ฐ ๋ฐฐ์ด๋ก ์ถ๋ ฅ ์ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ .length๋ฅผ ๋ถ์ฌ์ ์ถ๋ ฅํ๋ฉด ๊ธธ์ด๊ฐ ๋์จ๋ค
Array.from() ๋ฉ์๋๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด(array-like object)๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(iterable object)๋ฅผ ์๊ฒ ๋ณต์ฌํด ์๋ก์ดArray๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]
Destructing(๊ตฌ์กฐ๋ถํดํ ๋น)
๊ตฌ์กฐ๋ถํดํ ๋น์ด๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๊ฐ๋ณ๋ณ์์ ๋ด์ ์ ์๊ฒํ๋ ํํ์์ด๋ค.
๋ฐฐ์ด
๋ฐฐ์ด์ ๋ถํด
const array = ['apple', 'banana', 'orange', 'grapefruit']
const [first, second] = array
console.log(first) // 'apple'
console.log(second) // 'banana'
const result = []
function foo([first, second]) {
result.push(second)
result.push(first)
}
foo(array)
console.log(result) //['banana','apple']
์์ ๊ฐ์ ํํ์์ ์ฐ๋ฉด ๋ฐฐ์ด ์์ ์๋ ๊ฐ๋ค์ ๋ณ์์ ์ฌํ ๋น์ด ๊ฐ๋ฅํ๊ณ , ์ด ์ฌํ ๋น์ ํจ์์ ์ธ์๋ก ๋ฐ์ ๋๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
rest/spread ๋ฌธ๋ฒ์ ๋ฐฐ์ด ๋ถํด์ ์ ์ฉ
const array = ['apple', 'banana', 'orange', 'grapefruit']
const [start, ...rest] = array
console.log(start) //'apple'
console.log(rest) //['banana', 'orange', 'grapefruit']
์์ ๊ฐ์ ํํ์์ผ๋ก๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.๋จ, ์๋ ๊ฐ์ ํํ์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
// const [first, ...middle, last] = array
rest๋ฌธ๋ฒ ๋ค์๋ ์ผํ๊ฐ ์ฌ ์ ์๋ค.
๊ฐ์ฒด
๊ฐ์ฒด์ ๋จ์ถ(shorthand) ๋ฌธ๋ฒ
const name = '๊น์ฝ๋ฉ'
const age = 28
const person = {
name,
age,
level: 'Junior',
}
console.log(person) // {name: '๊น์ฝ๋ฉ', age: 28, level: 'Junior'}
์์ ๊ฐ์ด ๋ณ์๋ฅผ ๋จผ์ ์ ์ธํด์ค ๋ค, ์ ์ธํ ๋ณ์๋ฅผ ๊ฐ์ฒด์์ ๋ฃ์ ์ ์๋ค.
๊ฐ์ฒด ๋ถํด
const student = { name: '๊น์ฝ๋ฉ', major: '์ปดํจํฐ๊ณตํ' }
const { name } = student
// const { name } = student.name
console.log(name) //'๋ฐํด์ปค'
๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฒด์์ ์๋ ํค๋ฅผ ๋ณ์๋ก ํค๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ์ง๊ณ ์ฌ ์ ์๋ค.
rest/spread ๋ฌธ๋ฒ์ ๊ฐ์ฒด ๋ถํด์ ์ ์ฉ
๋ณ์๋ช ์ด ํค๊ฐ์ผ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
let itemId = 3
let cartItems = [
{
itemId: 1,
quantity: 1
},
{
itemId: 5,
quantity: 7
},
{
itemId: 2,
quantity: 3
}
]
[...cartItems, {itemId, quantity: 1}]
// {itemId: itemId , quantity: 1} ์ด๋ ๊ฒ ์์ฑํ์ง ์์๋ ๋๋ค.
// rest/spread ๋ฌธ๋ฒ์ ๊ฐ์ฒด ๋ถํด์ ์ ์ฉ(1)
const student1 = { name: '์ต์ด๋ณด', major: '๋ฌผ๋ฆฌํ๊ณผ' }
const { name, ...args } = student
console.log(name) //'์ต์ด๋ณด'
console.log(args) //{major:'๋ฌผ๋ฆฌํ๊ณผ'}
// rest/spread ๋ฌธ๋ฒ์ ๊ฐ์ฒด ๋ถํด์ ์ ์ฉ(2)
const student2 = { name: '์ต์ด๋ณด', major: '๋ฌผ๋ฆฌํ๊ณผ', lesson: '์์์ญํ', grade: 'B+' }
function getSummary({ name, lesson: course, grade }) {
return `${name}๋์ ${grade}์ ์ฑ์ ์ผ๋ก ${course}์ ์๊ฐํ์ต๋๋ค`}
console.log(getSummary(student)) //'์ต์ด๋ณด๋์ B+์ ์ฑ์ ์ผ๋ก ์์์ญํ์ ์๊ฐํ์ต๋๋ค'
๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์๊ณผ ๊ฐ์ด ํํ๋ ๊ฐ๋ฅํ๋ค.๋๋ ๊ฐ์ ๋ถํดํด์ ํ ๋น ํ ๋ lesson: course๊ฐ์ด ์ ์ธํด ์ฃผ๋ฉด ๋ณ์๋ช ์ด lesson์ด ์๋ course๋ก ๋ณ๊ฒฝ๋์ด ๊ฐ์ด ํ ๋น ๋๋ค.
์ด ์ธ์๋ ๋ณ์๋ช ๋ฟ๋ง ์๋๋ผ ํ ๋น๋ ๊ฐ์ ๋ณ๊ฒฝํ๋๋ฐ ์ฌ์ฉ๋ ๊ฐ๋ฅํ๋ค.
// rest/spread ๋ฌธ๋ฒ์ ๊ฐ์ฒด ๋ถํด์ ์ ์ฉ(3)
const user = {
name: '๊น์ฝ๋ฉ',
company: {
name: 'Code States',
department: 'Development',
role: {
name: 'Software Engineer'
}
},
age: 35
}
const changedUser = { //์ ๊ฐ๊ตฌ๋ฌธ์ผ๋ก ์๋ณธ์ ๊ฐ์ ธ์ ์ด๋ฆ์ '๋ฐํด์ปค'๋ก ๋์ด๋ฅผ '20'์ผ๋ก ๋ณ๊ฒฝ
...user,
name: '๋ฐํด์ปค', // : ๋ค๋ ๊ทธ ๊ฐ์ ๋ณ๊ฒฝํ๋ค๋ ์๋ฏธ
age: 20
}
const overwriteChanges = {
name: '๋ฐํด์ปค',
age: 20,
...user //๋ณ์ ์ ์ธ ์ดํ ์๋ณธ์ด ๋ถ๋ฌ์์ง๊ธฐ ๋๋ฌธ์ ์๋ณธ๊ณผ ๊ฐ์์ง๋ค.
}
const changedDepartment = {
...user, // ์ ๊ฐ๊ตฌ๋ฌธ์ ํตํด์ ์๋ณธ ใฑใฑ
company: { // ์๋ณธ ์์ ์๋ company๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝ
...user.company, // ์๋ณธ์ ์๋ company๊ฐ์ฒด์ ๊ฐ๋ค์ ๋ถ๋ฌ์ด
department: 'Marketing' // ๊ฐ์ ๋ณ๊ฒฝ
}
}
console.log(changedUser) /*{
name: '๋ฐํด์ปค',
company: {
name: 'Code States',
department: 'Development',
role: {
name: 'Software Engineer'
}
},
age: 20
} */
console.log(overwriteChanges) /*{
name: '๊น์ฝ๋ฉ',
company: {
name: 'Code States',
department: 'Development',
role: {
name: 'Software Engineer'
}
},
age: 35
}*/
console.log(changedDepartment) /*{
name: '๊น์ฝ๋ฉ',
company: {
name: 'Code States',
department: 'Marketing',
role: {
name: 'Software Engineer'
}
},
age: 35
}*/
use strict
"use strict"๋ ์คํฌ๋ฆฝํธ ์ต์๋จ์ด ์๋ ํจ์ ๋ณธ๋ฌธ ๋งจ ์ ์ ์ฌ ์๋ ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ค์ง ํด๋น ํจ์๋ง ์๊ฒฉ ๋ชจ๋๋ก ์คํ๋๋ค.
์๊ฒฉ ๋ชจ๋๋ ๋๊ฐ ์คํฌ๋ฆฝํธ ์ ์ฒด์ ์ ์ฉํ๋ค.
"use strict"๋ ๋ฐ๋์ ์ต์๋จ์ ์์น!!!!!!
๋ค์ ์ฝ๋์์๋ ์๊ฒฉ ๋ชจ๋๊ฐ ํ์ฑํX
alert("some code");
// ํ๋จ์ ์์นํ "use strict"๋ ์คํฌ๋ฆฝํธ ์๋จ์ ์์นํ์ง ์์ผ๋ฏ๋ก ๋ฌด์๋ฉ๋๋ค.
"use strict";
// ์๊ฒฉ ๋ชจ๋๊ฐ ํ์ฑํ๋์ง ์์ต๋๋ค.
"use strict"์ ์์๋ ์ฃผ์๋ง ์ฌ์ฉํ ์ ์๋ค → ๋ค๋ฅธ๊ฑฐ ์์ผ๋ฉด ํ์ฑํ X
Object.assign() ๋ฉ์๋๋ ์ถ์ฒ ๊ฐ์ฒด๋ค์ ๋ชจ๋ ์ด๊ฑฐ ๊ฐ๋ฅํ ์์ฒด ์์ฑ์ ๋ณต์ฌํด ๋์ ๊ฐ์ฒด์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
๊ทธ ํ ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget === target);
// expected output: true