TIL - 21.07.02 πŸ‘¨β€πŸ’» - JS

μ„±ν›ˆΒ·2021λ…„ 7μ›” 2일
0

TIL

λͺ©λ‘ 보기
18/59
post-thumbnail

TIL - 21.07.02 πŸ‘¨β€πŸ’»

Spread syntax ( μ „κ°œ ꡬ문 )


λ°°μ—΄μ—μ„œμ˜ μ „κ°œ ꡬ문

배열에 μžˆλŠ” μš”μ†Œλ₯Ό λ°°μ—΄ λͺ… μ•žμ— 점 μ„Έκ°œ λΆ™νžˆλŠ” κ²ƒμœΌλ‘œ λ¬Έμžμ—΄λ‘œ ν˜ΈμΆœν•œλ‹€.
배열끼리 ν•©μΉ˜κ±°λ‚˜ λ°°μ—΄κΉŒμ§€ λ³΅μ‚¬ν•˜λŠ”λ° μ‚¬μš©ν•  수 있으며 λ³΅μ‚¬ν•˜κ±°λ‚˜ 합쳐진 배열듀은 얕은 볡사가 되며 μ „κ°œ ꡬ문은 원 배열에 영ν–₯이 가지 μ•ŠλŠ” Immutableν•œ 문법이닀.

  • κΉŠμ€ 볡사와 얕은 λ³΅μ‚¬λŠ” μ°¨ν›„ OiMW둜 μ •λ¦¬ν•˜κ² λ‹€.
// λ°°μ—΄ ν•©μΉ˜κΈ° 예제 
let a = [1, 2, 3];
let b = [4, 5, 6];

let ab = [...a, ...b]; 
let ba = [...b, ...a];
console.log(ab) // [1, 2, 3, 4, 5, 6]; 
console.log(ba) // [4, 5, 6, 1, 2, 3]; 

// λ°°μ—΄ 볡사 예제
let a = [1 ,2 ,3]
let b = [..a] // a.slice()와 λΉ„μŠ·ν•˜λ‹€.

b.pop(); // 3;
console.log(b) // [1, 2]
console.log(a) // [1, 2, 3]; λ°°μ—΄ b의 μš”μ†Œκ°€ μˆ˜μ •λ˜μ—ˆμ§€λ§Œ 원 λ°°μ—΄ a의 μš”μ†ŒλŠ” 변함이 μ—†λ‹€.
// λ‹€λ§Œ 얕은 볡사(shallow copy)이기에 λ°°μ—΄μ˜ μš”μ†Œλ‘œ 객체, 배열등이 μ˜¬λ•Œ 
// κ·Έ ν•΄λ‹Ή μš”μ†Œλ“€μ—λŠ” ν•΄λ‹Ή μš”μ†Œμ˜ 데이터가 μžˆλŠ” Heap의 μ£Όμ†Œλ§Œ μ €μž₯λœλ‹€.

κ°μ²΄μ—μ„œμ˜ μ „κ°œκ΅¬λ¬Έ

λ°°μ—΄μ—μ„œμ˜ κ²½μš°μ™€ μœ μ‚¬ν•˜κ²Œ 객체λ₯Ό λ³΅μ‚¬ν•˜κ±°λ‚˜ 볡수의 객체λ₯Ό ν•©μΉ λ•Œ μ‚¬μš©ν•œλ‹€.
λ‹€λ§Œ λ³΅μ‚¬μ˜ κ²½μš°λŠ” λ°°μ—΄κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, λ³΅μ‚¬ν• λ•ŒλŠ” 쑰금 λ‹€λ₯΄λ‹€.
같은 ν”„λ‘œνΌν‹° ν‚€λ₯Ό 가지고 μžˆλŠ” 객체끼리 ν•©μΉ λ•Œκ°€ λ‹€λ₯Έλ°, 이 κ²½μš°λŠ” 늦게 μž…λ ₯ν•œ 객체의 ν”„λ‘œνΌν‹° λ°Έλ₯˜λ₯Ό 가지고 μžˆλŠ” 객체가 λ°˜ν™˜λœλ‹€.

// 객체 ν•©μΉ˜κΈ° 예제
let a ={
  name: 'sunghoon',
  job: 'officer',
};

let b ={
  job: 'dev'
  age: 26;
};

let c = {...a, ...b};
console.log(c) // { name: 'sunghoon', job: 'dev', age: 26 }
// ν”„λ‘œνΌν‹° ν‚€κ°€ job인 ν”„λ‘œνΌν‹°μ˜ 값이 officerμ—μ„œ dev둜 λ°”λ€Œμ—ˆλ‹€.

// 객체 볡사 예제
let a ={
  name: 'sunghoon',
  job: 'dev',
};

let b = { ...a }

delete b.job;
console.log(b) // { name: 'sunghoon' }
console.log(a) // { name: 'sunghoon', job: 'dev' }
// λ³΅μ‚¬ν•œ 객체인 b의 ν”„λ‘œνΌν‹°κ°€ μˆ˜μ •λ˜μ—ˆμ§€λ§Œ 원 객체인 a의 ν”„λ‘œνΌν‹°μ— 변경은 μ—†λ‹€.

Rest νŒŒλΌλ―Έν„°

rest νŒŒλΌλ―Έν„°λŠ” 정해지지 μ•Šμ€ 수의 μš”μ†Œλ₯Ό 가진 인수λ₯Ό λ°°μ—΄λ‘œ λ‚˜νƒ€λ‚Ό 수 있게 ν•΄μ€€λ‹€.
μ‰½κ²Œ λ§ν•΄μ„œ 맀개 λ³€μˆ˜λ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ λ°›μ•„μ„œ μ‚¬μš©κ°€λŠ₯ν•˜κ³  맀개 λ³€μˆ˜μ˜ κ°―μˆ˜κ°€ κ°€λ³€μ μΌλ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.
단, rest νŒŒλΌλ―Έν„° μ΄ν›„μ—λŠ” λ‹€λ₯Έ 맀개 λ³€μˆ˜λ‚˜ 트레일링 μ½€λ§ˆκ°€ 올 수 μ—†λ‹€.
μž…λ ₯된 μΈμžκ°€ 적어 rest νŒŒλΌλ―Έν„°μ— ν• λ‹Ήλ˜μ§€ λͺ»ν•˜λ©΄ 빈 배열이 λ°˜ν™˜λœλ‹€.

const favFruit = function(fruit1, fruit2, ...fruits) {
  console.log('My favorite fruit is ' + fruit1)
  console.log('and I also like ' + fruit2)
  console.log('and there\'s ' + fruits.length + ' more fruits that I like')
  console.log(fruits)
}
             
favFruit('grape', 'melon', 'peach', 'apple', 'pineapple')
  // My favorite fruit is grape;
  // and I also like melon;
  // and there's 3 more fruits that I like
  // ['peach', 'apple', 'pineapple']; // λ‚˜λ¨Έμ§€ μΈμžλ“€μ΄ λ°°μ—΄μ˜ ν˜•νƒœλ‘œ ν• λ‹Ήλ˜μ—ˆλ‹€.

ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

ꡬ쑰 λΆ„ν•΄ 할당은 λ°°μ—΄μ΄λ‚˜ 객체의 속성을 해체해 κ·Έ 값을 κ°œλ³„ λ³€μˆ˜μ— 담을 수 있게 ν•˜λŠ” JavaScript의 ν‘œν˜„μ‹μ΄λ‹€.
λ°°μ—΄μ΄λ‚˜ 객체λ₯Ό λΆ„ν•΄ν• λ•Œ rest νŒŒλΌλ―Έν„°λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

// λ°°μ—΄μ˜ 경우
const [a, b, ...c] = [1, 2, 3, 4, 5]

console.log(a) // 1; 
console.log(b) // 2; a,bλŠ” μˆ«μžμ—΄μ΄λ‹€.
console.log(c) // [3, 4, 5]

// 객체의 경우
const {a, b, ...c} = {a:1, b:2, c:3, d:4, e:5}
console.log(a) // 1; 
console.log(b) // 2; a,bλŠ” μˆ«μžμ—΄μ΄λ‹€.
console.log(c) // { c:3, d:4, e:5}

// ν•¨μˆ˜ μ‚¬μš© 예제
function orderBurger({kindOf, sauce, topping,}){
  console.log(`${sauce}μ†ŒμŠ€μ™€ ${topping}이/κ°€ μΆ”κ°€λœ ${kindOf}버거가 μ£Όλ¬Έλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`)
}
let iWant = {
  kindOf: 'ν†΅μƒˆμš°',
  sauce: '핫케첩',
  bread: 'μ°ΈκΉ¨λΉ΅',
  topping: '치즈',
}
orderBurger(iWant);
// ν•«μΌ€μ²©μ†ŒμŠ€μ™€ 치즈이/κ°€ μΆ”κ°€λœ ν†΅μƒˆμš°λ²„κ±°κ°€ μ£Όλ¬Έλ˜μ—ˆμŠ΅λ‹ˆλ‹€.; 
// 객체(iWant)의 ν”„λ‘œνΌν‹°μ€‘ ν•¨μˆ˜μ˜ 맀개 객체에 μžˆλŠ” λ³€μˆ˜μ™€ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”κ²Œ 있으면
// κ·Έλƒ₯ λ¬΄μ‹œν•˜κ³  μžˆλŠ” κ²ƒλ“€λ§Œ μ°Ύμ•„μ„œ ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€.

Shorthand notation ( 단좕 ν‘œκΈ°λ²• )

단좕 ν‘œκΈ°λ²•μ€ 전역에 μ„ μ–Έλ˜κ³  ν• λ‹Ήλœ λ³€μˆ˜κ°€ μžˆλŠ” μƒνƒœμ—μ„œ κ°μ²΄λ¦¬ν„°λŸ΄μ—μ„œ ν•΄λ‹Ή λ³€μˆ˜κ°€ ν‚€λ‘œ 있으면 μ „μ—­ λ³€μˆ˜λ₯Ό κ°€μ Έμ™€μ„œ 벨λ₯˜μ‚ΌλŠ” 것이닀.

let name = 'sunghoon'

let planet = {
  name,
  age: 26,
}

console.log(planet) // { name: 'sunghoon', age: 26 }

Koans ν’€λ©° μ•Œμ•„λ‚Έ 것

  • 사칙연산 쀑 + λ₯Ό μ œμ™Έν•˜κ³  λ‚˜λ¨Έμ§€λŠ” 값을 항상 μˆ«μžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.
  • λΆˆλ¦¬μ–Έ νƒ€μž…κ³Ό μˆ«μžμ—΄μ„ κ³„μ‚°ν•˜λ©΄ trueλŠ” 1, falseλŠ” 0으둜 더해진닀.
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜ λ‚΄ μžμ‹ μ˜ thisκ°€ 없기에 ν•¨μˆ˜ λ°”λ‘œ λ°–μ—μ„œ thisλ₯Ό μ°ΎλŠ”λ‹€.
  • 객체끼리 합칠땐 Object.assign(obj1, obj2)λ₯Ό μ΄μš©ν•˜μž.

GOOD πŸ˜‰

μ „κ°œ ꡬ문과 rest νŒŒλΌλ―Έν„°λ₯Ό μ΅ν˜”λ‹€.
νŽ˜μ–΄λΆ„κ³Ό Koansλ₯Ό ν’€λ©° μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 보닀 μΉœν•΄μ‘Œλ‹€.

BAD πŸ˜₯

Koansλ₯Ό ν’€λ©° 볡슡이 μ€‘μš”ν•˜λ‹€λŠ”κ±Έ λ‹€μ‹œ ν•œλ²ˆ κΉ¨λ‹¬μ•˜λ‹€.

TO DO πŸ”₯

  • 객체 κΉŠμ€ 볡사, 얕은 볡사
  • DOM ꡬ쑰
  • 이벀트 객체
  • κ³ μ°¨ ν•¨μˆ˜
  • React

Retrospect 🧐

벌써 ν•œ μ£Όκ°€ ν›Œμ© 지났닀.
μˆ™μ·¨ λ•Œλ¬Έμ— μƒν™œνŒ¨ν„΄μ΄ μ™„μ „νžˆ 망가지고 정신없이 κ³΅λΆ€ν•˜λ‹€ λ³΄λ‹ˆ 벌써 κΈˆμš”μΌμ΄λΌλ‹ˆ.
μ—­μ‹œ 뭔가에 μ§‘μ€‘ν•˜κ³  있으면 μ‹œκ°„μ€ 금방금방 ν˜λŸ¬κ°€λŠ” 것 κ°™λ‹€.

μ‹œμž‘ν•œμ§€ μ–Όλ§ˆ μ•ˆλœ 것 같은데 벌써 2μ£Ό 쑰금 μ•ˆλ˜λŠ” μ‹œκ°„ ν›„μ—λŠ” 첫번째 HA와 λ§žλΆ™κ²Œ 생겼닀.
κ°•ν•΄μ Έμ„œ μ‰½κ²Œ λ•Œλ € λˆ•νž 수 있길 κ³ λŒ€ν•œλ‹€.

그리고 μ˜€λŠ˜μ€ κΈˆμš”μΌμ΄κ³  λ­”κ°€ κ·Έλƒ₯ 보내기 μ•„μ‰¬μš°λ‹ˆ λ§₯μ£Ό ν•œ μž” ν•˜λ©° λ§ˆμ§€λ§‰μ„ μž₯μ‹ν•˜λŠ”κ±Έλ‘œ.
μ™ˆμ™ˆ

Reference πŸ™‡

https://developer.mozilla.org/

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€