[JS] koans 볡μ΅[(μ묡,λͺ μ)νμ λ³ν, νΈμ΄μ€ν , νμ΄νν¨μ, …etc]
π λκ° μ₯ν©νκ² λμ΄νκ±° κ°μλ°,, λλ¦ ν·κ°λ Έλ κ² μμ£Όλ‘ μ 리λ₯Ό ν΄λ³΄μλ€!
μκ°λ³΄λ€ μκ³ μλ κ²μ΄λΌκ³ μκ°ν κ²λ€μ΄ μ€νλ € λ€μ΄κ°μ λ¬Έμ λ₯Ό νμ΄λ³΄λ
λλ μ λλ‘ μκ³ μλ κ²μ΄ μλμκ³ , μλ€κ³ μ°©κ°νκ³ λμΆ© μ°κ³ μμλ€γ γ γ
μ μ μ°¨λ¦¬κ³ ~~ μ°¨κ·Όν λ€μ νλ©΄ λλκΉ λγ ‘γ ‘κ°μ!!
μ묡μ νμ λ³ν(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