Thanks to visit codestin.com
Credit goes to github.com

Skip to content

🌟 λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 점차 ν˜„λŒ€μ μ΄κ³  μ‹€μš©μ μœΌλ‘œ λ³€ν™”ν•˜κ³  μžˆλŠ” ECMAScript 에 μ μ‘ν•˜λŠ” 방법을 μ•Œλ €μ€λ‹ˆλ‹€.

License

Notifications You must be signed in to change notification settings

effy-coding/modern-javascript

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

μ†Œκ°œ πŸ’β€β™‚οΈ

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€. λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 점차 ν˜„λŒ€μ μ΄κ³  μ‹€μš©μ μœΌλ‘œ λ³€ν™”ν•˜κ³  μžˆλŠ” ECMAScript 에 μ μ‘ν•˜λŠ” 방법을 μ•Œλ €μ€λ‹ˆλ‹€.

ν˜„μž¬ 글을 μ“°κ³  μžˆλŠ” μ‹œμ μΈ 2020λ…„μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 이미 ν’λΆ€ν•œ ν‘œμ€€ λ‚΄μž₯ 객체(Standard built-in objects)듀을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 덕뢄에 μš°λ¦¬λŠ” 더 이상 전톡적이고 κ±°λŒ€ν•œ 라이브러리(lodash 와 같은)듀을 μ‚¬μš©ν•  ν•„μš”μ„±μ΄ 쀄어듀고 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³ : λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ES6+ ν™˜κ²½μ—μ„œ μ§„ν–‰λ©λ‹ˆλ‹€.

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ©μ 

  • 개발자의 μ‹€μˆ˜ 쀄이기
  • μ˜λ„μΉ˜ μ•Šμ€ λ™μž‘ λ°©μ§€
  • κ°„κ²°ν•˜κ³  읽기 μ‰¬μš΄ μ½”λ“œ μž‘μ„±

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ’‹μ•„ν•˜λŠ” 것 πŸ‘

  • λ‹¨μˆœν•¨
  • 가벼움
  • 본질
  • MDN λ¬Έμ„œ
  • TC39

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ‹«μ–΄ν•˜λŠ” 것 πŸ‘Ž

  • λ³΅μž‘ν•¨
  • 무거움
  • μž₯황함 (Verbose)
  • λΆˆν•„μš”ν•œ 라이브러리 μ‚¬μš©

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ•„λž˜ κ°œλ…λ“€μ˜ λ³Έμ§ˆμ„ μ΅œλŒ€ ν•œλ‘ λ¬Έμž₯ μ΄λ‚΄λ‘œ 간단 λͺ…λ£Œν•˜κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€. λ³Έμ§ˆμ„ 꿰뚫으면 길게 μ„€λͺ…ν•  ν•„μš”λ„ μ—†μŠ΅λ‹ˆλ‹€.

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ λ‹€λ£¨λŠ” κ°œλ…

Rest Parameters

Destructuring Assignment

Default Parameter

Named Parameter

Truthy and Falsy

Array.prototype.map

Array.prototype.reduce

Array.prototype.filter

Array.prototype.includes

Array.prototype.every

Array.prototype.some

String.prototype.split

String.prototype.join

Object.entries

Object.values

Object.keys


Rest Parameters

μ •μ˜

Rest Parameters λŠ” μ •ν•΄μ§€μ§€ μ•Šμ€ 수 λ§€κ°œλ³€μˆ˜λ₯Ό μ‹€μ œ λ°°μ—΄λ‘œ λ‚˜νƒ€λ‚Ό 수 있게 ν•©λ‹ˆλ‹€.

1. λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜ μ˜ˆμ‹œ

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: κ°œμˆ˜κ°€ μ •ν•΄μ§€μ§€ μ•Šμ€ λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯ λ°›μ•„ 이의 총 합을 κ΅¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ„Έμš”.

λΆˆβ€”νŽΈ

function sum (a, b, ... y, z) {
  return a + b + ... + y + z
} // [a-z] κΉŒμ§€ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€. 즉 λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ μ •ν•΄μ Έ μžˆμŠ΅λ‹ˆλ‹€. πŸ‘Ž
    
console.log(sum(1, 2, 3, 4, 5, 6, 7, 8)) // [i-z] κΉŒμ§€ undefined, λ•Œλ¬Έμ— NaN 좜λ ₯ πŸ‘Ž

νŽΈβ€”μ•ˆ βœ…

function sum (...params) {
  return params.reduce((prev, curr) => prev + curr)
} // λ§€κ°œλ³€μˆ˜κ°€ λͺ‡ κ°œλ“  합을 잘 κ΅¬ν•©λ‹ˆλ‹€.

console.log(sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) // -> 55 πŸ‘

2. 또 λ‹€λ₯Έ λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜ μ˜ˆμ‹œ

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: 첫번째 λ§€κ°œλ³€μˆ˜μ™€ λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό κ³±ν•œ 배열을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ„Έμš”.

νŽΈβ€”μ•ˆ βœ…

function multiply (multiplier, ...params) {
  return params.map(param => multiplier * param)
}

console.log(multiply(5, 1, 2, 3, 4)) // -> [ 5, 10, 15, 20 ] πŸ‘

3. arguments 와 λ‹€λ₯Έμ 

arguments λŠ” μœ μ‚¬ λ°°μ—΄μž…λ‹ˆλ‹€. λ•Œλ¬Έμ— map, reduce, forEach 와 같은 λ°°μ—΄ λ©”μ†Œλ“œλ₯Ό 호좜 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

function sum (a, b, c) {
  // -> TypeError: arguments.reduce is not a function
  return arguments.reduce((prev, curr) => prev + curr)
}

sum(1, 2, 3)

Destructuring Assignment

μ •μ˜

λ°°μ—΄μ΄λ‚˜ 객체의 속성을 ν•΄μ²΄ν•˜μ—¬ κ·Έ 값을 κ°œλ³„ λ³€μˆ˜μ— λ‹΄μŠ΅λ‹ˆλ‹€.

1. 객체 ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

객체λ₯Ό ꡬ쑰 λΆ„ν•΄ν•΄λ΄…μ‹œλ‹€.

ν™œμš© 1: κΈ°λ³Έκ°’ ν• λ‹Ή

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: me 객체λ₯Ό 좜λ ₯ν•˜μ„Έμš”.

πŸ‘‰ 쑰건: me.car κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ μ—†μŒ 을 좜λ ₯ν•˜μ„Έμš”.

λΆˆβ€”νŽΈ

const me = {
  firstName: 'λ‹Ήκ·Ό',
  lastName: '손',
  hobby: ['🐳', '🍏', 'πŸŽ’', '🌼'],
  location: '지ꡬ',

  car: 'ν…ŒμŠ¬λΌ'
}

// 윽... λ‚΄ 눈...!
console.log('이름', me.lastName, me.firstName)
console.log('μ§€μ—­', me.location)
console.log('μ·¨λ―Έ', me.hobby)

// 더 μ‹¬ν”Œν•˜κ²Œ μ•ˆλ κΉŒμš”?
if (me.car) {
  console.log('μžλ™μ°¨', me.car)
} else {
  console.log('μžλ™μ°¨', 'μ—†μŒ')
}

νŽΈβ€”μ•ˆ βœ…

const me = {
  firstName: 'λ‹Ήκ·Ό',
  lastName: '손',
  hobby: ['🐳', '🍏', 'πŸŽ’', '🌼'],
  location: '지ꡬ',

  car: 'ν…ŒμŠ¬λΌ'
}

const { firstName, lastName, hobby, location, car = 'μ—†μŒ' } = me // μ’‹μŠ΅λ‹ˆλ‹€. πŸ‘

console.log('이름', lastName, firstName)
console.log('μ§€μ—­', location)
console.log('μ·¨λ―Έ', hobby)
console.log('μžλ™μ°¨', car)

2. λ°°μ—΄ ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

배열을 ꡬ쑰 λΆ„ν•΄ν•΄λ΄…μ‹œλ‹€.

ν™œμš© 1: μ•ˆμ „ν•œ 볡사

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: arr1 κ³Ό λ˜‘κ°™μ€ arr2 λ₯Ό λ§Œλ“œμ„Έμš”.

πŸ‘‰ 쑰건: arr1 의 λ³€ν˜•μ΄ arr2 에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šκ²Œ ν•˜μ„Έμš”.

λΆˆβ€”νŽΈ

const arr1 = [1, 2, 3]
const arr2 = arr1 // arr2 λŠ” arr1 λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

arr1.push(4)

console.log(arr1) // -> [ 1, 2, 3, 4 ]
console.log(arr2) // -> [ 1, 2, 3, 4 ] arr2 κΉŒμ§€ λ³€ν˜•λμŠ΅λ‹ˆλ‹€. πŸ‘Ž

νŽΈβ€”μ•ˆ βœ…

const arr1 = [1, 2, 3]
const arr2 = [...arr1] // arr1 λ₯Ό ꡬ쑰 λΆ„ν•΄μ‹œμΌœ 'μƒˆλ‘œμš΄' 배열을 λ§Œλ“­λ‹ˆλ‹€. πŸ‘

arr1.push(4)

console.log(arr1) // -> [ 1, 2, 3, 4 ]
console.log(arr2) // -> [ 1, 2, 3 ] πŸ‘

ν™œμš© 2: 또 λ‹€λ₯Έ μ•ˆμ „ν•œ 볡사

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: μ£Όμ–΄μ§„ fruits 배열을 μ΄μš©ν•΄ 첫번째 과일과 λ‚˜λ¨Έμ§€ 과일을 좜λ ₯ν•˜μ„Έμš”.

λΆˆβ€”νŽΈ

const fruits = ['🍎', '🍌', 'πŸ₯']

// apple κ³Ό rest λŠ” fruits λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.
const apple = fruits.shift() // fruits 의 첫번째 μ›μ†Œλ₯Ό μ œκ±°ν•˜κ³ , apple 에 ν• λ‹Ή
const rest = fruits

console.log('첫번째 과일', apple) // -> 🍎
console.log('λ‚˜λ¨Έμ§€ 과일', ...rest) // -> 🍌 πŸ₯

console.log(fruits) // -> [ '🍌', 'πŸ₯'] fruits 배열이 λ³€ν˜•λ¨ πŸ‘Ž

νŽΈβ€”μ•ˆ βœ…

const fruits = ['🍎', '🍌', 'πŸ₯']

const [apple, ...rest] = fruits // 배열을 ꡬ쑰 λΆ„ν•΄μ‹œμΌœ apple κ³Ό rest κ°€ fruits λ₯Ό μ°Έμ‘°ν•˜μ§€ μ•Šλ„λ‘ ν•΄μ€λ‹ˆλ‹€.

console.log('첫번째 과일', apple)  // -> 🍎
console.log('λ‚˜λ¨Έμ§€ 과일', ...rest)  // -> 🍌 πŸ₯

console.log(fruits) // -> [ '🍎', '🍌', 'πŸ₯' ] fruits λ°°μ—΄ λ³€ν˜• μ•ˆλ¨ πŸ‘

Default Parameter

μ •μ˜

Default Parameter λŠ” λ§€κ°œλ³€μˆ˜μ— κΈ°λ³Έ 값을 ν• λ‹Ήν•©λ‹ˆλ‹€.

1. λ§€κ°œλ³€μˆ˜ κΈ°λ³Έ κ°’

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: 이름 그리고 λ‚˜μ΄λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜ aboutMe λ₯Ό μž‘μ„±ν•˜μ„Έμš”.

πŸ‘‰ 쑰건 1: λ‚˜μ΄λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨μ£Όμ§€ μ•Šμ•˜λ‹€λ©΄ λΉ„κ³΅κ°œ 둜 좜λ ₯ν•˜μ„Έμš”.

πŸ‘‰ 쑰건 2: 0 μ‚΄ 도 μž…λ ₯ κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“œμ„Έμš”.

λΆˆβ€”νŽΈ

function aboutMe (name, age) {
  // 윽... λ‚΄ 눈...! πŸ‘Ž
  // 더 μ‹¬ν”Œν•˜κ²Œ μ•ˆ λ κΉŒμš”?
  age = (typeof age !== 'undefined') ? age : 'λΉ„κ³΅κ°œ'

  console.log(name, age)
}

aboutMe('손당근') // -> 손당근 λΉ„κ³΅κ°œ
aboutMe('손당근', 0) // -> 손당근 0
aboutMe('손당근', 20) // -> 손당근 20

λΆˆβ€”νŽΈ

function aboutMe (name, age) {
  if (!age) { //  0 은 'κ±°μ§“ κ°’' 이기 λ•Œλ¬Έμ— 0 살을 μž…λ ₯해도 'λΉ„κ³΅κ°œ'λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. πŸ‘Ž
    age = 'λΉ„κ³΅κ°œ'
  }

  console.log(name, age)
}

aboutMe('손당근') // -> 손당근 λΉ„κ³΅κ°œ
aboutMe('손당근', 0) // -> 손당근 λΉ„κ³΅κ°œ ... 0 살을 μž…λ ₯ν–ˆμ§€λ§Œ 'λΉ„κ³΅κ°œ'κ°€ 좜λ ₯λλ„€μš”? πŸ‘Ž
aboutMe('손당근', 20) // -> 손당근 20

νŽΈβ€”μ•ˆ βœ…

function aboutMe (name, age = 'λΉ„κ³΅κ°œ') { // λͺ¨λ“  쑰건을 λ§Œμ‘±ν•˜λ©° μ‹¬ν”Œν•©λ‹ˆλ‹€. πŸ‘ 
  console.log(name, age)
}

aboutMe('손당근') // -> 손당근 λΉ„κ³΅κ°œ
aboutMe('손당근', 0) // -> 손당근 0
aboutMe('손당근', 20) // -> 손당근 20

πŸ€·β€β™€οΈ ν•˜μ§€λ§Œ...

이름은 μž…λ ₯ν•˜μ§€ μ•Šκ³  λ‚˜μ΄λ§Œ μž…λ ₯ν•˜κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒμš”? 그건 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

μ™œλƒλ©΄ aboutMe 의 λ§€κ°œλ³€μˆ˜λŠ” μˆœμ„œκ°€ μ •ν•΄μ§„ λ§€κ°œλ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ΄μ£ .

λΆˆβ€”νŽΈ

aboutMe(, 10) // 이런건 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
aboutMe(10) // κ·Έλ ‡λ‹€κ³  μ΄λ ‡κ²Œ ν•˜μžλ‹ˆ name λ§€κ°œλ³€μˆ˜μ— 숫자 10 이 λ“€μ–΄κ°€λ²„λ¦½λ‹ˆλ‹€.

πŸ€·β€β™‚οΈ ν•΄κ²°λ²•μ€μš”?

Destructuring Assignment λ₯Ό ν™œμš©ν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλ„ Named Parameter λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉 λ§€κ°œλ³€μˆ˜μ— μˆœμ„œκ°€ μ—†μ–΄μ§€κ³  이름이 λΆ™κ²Œ λ˜λŠ” κ±°μ£ .

이 κ°œλ…μ€ λ‹€μŒ λ‹¨μ›μ—μ„œ λ‹€λ£Ήλ‹ˆλ‹€. κ·ΈλŸ¬λ‹ˆ 맛보기 μ½”λ“œλ§Œ ν›‘κ³  λ„˜μ–΄κ°€ 보죠.

νŽΈβ€”μ•ˆ βœ…

function aboutMe ({ name = 'λΉ„κ³΅κ°œ', age = 'λΉ„κ³΅κ°œ' }) { // 'μˆœμ„œ' κ°€ 사라진 λ§€κ°œλ³€μˆ˜λ“€ πŸ‘πŸ‘πŸ‘
  console.log(name, age)
}

aboutMe({ name: '손당근', age: 20 }) // -> 손당근 20
aboutMe({ age: 20, name: '손당근' }) // -> 손당근 20 ... 심지어 λ§€κ°œλ³€μˆ˜ μˆœμ„œκΉŒμ§€ 바껴도 잘 좜λ ₯ν•©λ‹ˆλ‹€!

aboutMe({ name: '손당근' }) // -> 손당근 λΉ„κ³΅κ°œ ... λ‚˜μ΄λ₯Ό λ„˜κΈ°μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 'λΉ„κ³΅κ°œ' λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
aboutMe({ age: 20 }) // -> λΉ„κ³΅κ°œ λΉ„κ³΅κ°œ

aboutMe({}) // -> λΉ„κ³΅κ°œ λΉ„κ³΅κ°œ ... λ‘˜ λ‹€ 'λΉ„κ³΅κ°œ' 둜 좜λ ₯ κ°€λŠ₯ν•©λ‹ˆλ‹€!

Named Parameter

μ •μ˜

Named Parameter λŠ” λ§€κ°œλ³€μˆ˜μ— 이름을 μ§€μ •ν•΄μ€λ‹ˆλ‹€.

ν™œμš©1: 선택적 λ§€κ°œλ³€μˆ˜

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: λ‚˜μ΄μ™€ 직업을 λ§€κ°œλ³€μˆ˜λ‘œ λ°›κ³  좜λ ₯ν•˜λŠ” ν•¨μˆ˜ aboutMe λ₯Ό μž‘μ„±ν•˜μ„Έμš”.

πŸ‘‰ 쑰건 1: λ‚˜μ΄λ§Œ μž…λ ₯ν•  μˆ˜λ„, μ§μ—…λ§Œ μž…λ ₯ν•  μˆ˜λ„, λ‘˜ λ‹€ μž…λ ₯ν•  μˆ˜λ„ 그리고 λ‘˜ λ‹€ μž…λ ₯ μ•ˆ ν•  μˆ˜λ„ 있게 ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ„Έμš”.

λΆˆβ€”νŽΈ

// λ§€κ°œλ³€μˆ˜μ— μˆœμ„œκ°€ μ •ν•΄μ ΈμžˆκΈ° λ•Œλ¬Έμ— 쑰건을 λ§Œμ‘±ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. πŸ‘Ž
function aboutMe (age, job) {
  age && console.log('λ‚˜μ΄', age)
  job && console.log('직업', job)
}

aboutMe(20) // -> λ‚˜μ΄ 20 ... λ‚˜μ˜μ§€ μ•Šμ•„ λ³΄μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‹€μŒ 라인을 λ΄λ³΄μ„Έμš”.
// ν•¨μˆ˜κ°€ κΈ°λŒ€ν•œ κ²ƒμ²˜λŸΌ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!
aboutMe('개발자') // -> λ‚˜μ΄ 개발자 ... λ‚˜μ΄κ°€ 개발자라고 λ‚˜μ™”κ΅°μš”. πŸ‘Ž

νŽΈβ€”μ•ˆ βœ…

// Named Parameter 덕뢄에 쑰건을 λ§Œμ‘±ν•©λ‹ˆλ‹€.
// μ„ νƒμ μœΌλ‘œ λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. πŸ‘
function aboutMe ({ age, job }) {
  age && console.log('λ‚˜μ΄', age)
  job && console.log('직업', job)
}

// λ‚˜μ΄μ™€ 직업 쀑 ν•˜λ‚˜λ§Œ μž…λ ₯도 κ°€λŠ₯ν•©λ‹ˆλ‹€. πŸ‘
aboutMe({ age: 20 }) // -> λ‚˜μ΄ 20
aboutMe({ job: '개발자' }) // -> 직업 개발자

ν™œμš©2: μˆœμ„œ μ—†λŠ” λ§€κ°œλ³€μˆ˜

λ§€κ°œλ³€μˆ˜κ°€ 3개 이상이면 μˆœμ„œλ₯Ό 잘λͺ» μž…λ ₯ν•  κ°€λŠ₯성이 ν½λ‹ˆλ‹€.

특히 λ§€κ°œλ³€μˆ˜μ— νƒ€μž…μ„ μ§€μ • ν•  수 μ—†κΈ°λ•Œλ¬Έμ— μ•„λ¬΄λŸ° κ²½κ³  없이 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ³ , μ˜ˆμƒμΉ˜ λͺ»ν•œ 일이 λ°œμƒν•˜κ² μ£ .

이λ₯Ό λ°©μ§€ν•˜λ €λ©΄ μˆœμ„œ μ—†λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€.

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: μ°½ 이름, κ°€λ‘œ, μ„Έλ‘œ μ‚¬μ΄μ¦ˆ, 배경색, ν…Œλ‘λ¦¬ 색, ν…Œλ‘λ¦¬ λ‘κ»˜ 그리고 폰트λ₯Ό μž…λ ₯ λ°›μ•„ μƒˆλ‘œμš΄ 창을 λ Œλ”λ§ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ„Έμš”.

λΆˆβ€”νŽΈ

function render (name, width, height, backgroundColor, borderColor, borderWidth, font) {
  // doSomething ...
}

// λ§€κ°œλ³€μˆ˜ μˆœμ„œλ₯Ό ν•˜λ‚˜λΌλ„ 틀리면 큰 μΌλ‚©λ‹ˆλ‹€.
render('μƒˆ μ°½', 640, 480, 'red', 'green', 1, 'Apple Bold')

νŽΈβ€”μ•ˆ βœ…

function render ({ name, width, height, backgroundColor, borderColor, borderWidth, font }) {
  // doSomething ...
}

// 이제 λ§€κ°œλ³€μˆ˜ μˆœμ„œμ™€ 상관없이 μ•ˆμ „ν•˜κ²Œ 호좜 κ°€λŠ₯ν•©λ‹ˆλ‹€. πŸ‘
render({
  height: 480,
  borderColor: 'green',
  backgroundColor: 'red',
  font: 'Apple Bold',
  name: 'μƒˆ μ°½',
  borderWidth: 1,
  width: 640
})

Truthy and Falsy

μ°Έκ³Ό 거짓은 Boolean 을 κΈ°λŒ€ν•˜λŠ” λ¬Έλ§₯μ—μ„œ true false 둜 ν‰κ°€λ˜λŠ” κ°’μž…λ‹ˆλ‹€.

1. κ±°μ§“ κ°’

μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” 총 7 κ°€μ§€ κ±°μ§“ 값이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

false

0

0n

''

null

undefined

NaN

ν™œμš© 1: 배열이 λΉ„μ–΄μžˆλ‚˜ ν™•μΈν•˜κΈ°

배열은 length ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 검사해 배열이 λΉ„μ–΄μžˆλŠ”μ§€ 확인 κ°€λŠ₯ν•©λ‹ˆλ‹€.

λΆˆβ€”νŽΈ

const arr = [1, 2, 3]

if (arr.length === 0) { // μ’€ 더 μ‹¬ν”Œν•˜κ²Œ μ•ˆλ κΉŒμš”?
  console.log('배열이 λΉ„μ–΄μžˆμŒ!')
}

νŽΈβ€”μ•ˆ βœ…

const arr = [1, 2, 3]

if (!arr.length) { // πŸ‘ μ’‹μŠ΅λ‹ˆλ‹€! 0 은 Falsy κΈ° λ•Œλ¬Έμ— 배열이 λΉ„μ–΄μžˆλ‹€λ©΄ 쑰건을 λ§Œμ‘±ν•©λ‹ˆλ‹€.
  console.log('배열이 λΉ„μ–΄μžˆμŒ!')
}

ν™œμš© 2: μ•ˆμ „νžˆ λ©”μ†Œλ“œ ν˜ΈμΆœν•˜κΈ°

μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ TypeError: ... is not a function λ₯Ό throw ν•©λ‹ˆλ‹€.

이λ₯Ό λ°©μ§€ν•˜κ³ μž 방어적인 μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ΄…μ‹œλ‹€.

λΆˆβ€”νŽΈ

const notArray = 5000

notArray.forEach(it => console.log(it)) // -> TypeError: notArray.forEach is not a function

νŽΈβ€”μ•ˆ βœ…

const iAmNotArray = 5000

if (iAmNotArray.forEach) {
  iAmNotArray.forEach(it => console.log(it)) // πŸ‘
}

2. μ°Έ κ°’

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ κ±°μ§“ 값을 μ œμ™Έν•˜λ©΄ λͺ¨λ‘ μ°Έ κ°’μž…λ‹ˆλ‹€.

ν™œμš©1: 객체 μš”μ†Œ 검사

movie 객체λ₯Ό μ°Έμ‘°ν•΄ <아이언맨> 이 ν•œκΈ€ μžλ§‰μ„ μ§€μ›ν•˜λŠ”μ§€ 확인해 λ΄…μ‹œλ‹€.

νŽΈβ€”μ•ˆ βœ…

const movie = {
  ironman: {
    ko: '아이언맨 4',
    en: 'Iron Man 4'
  }
}

// μ’‹μŠ΅λ‹ˆλ‹€. πŸ‘
if (movie.ironman.ko) {
  console.log('ν•œκΈ€ μžλ§‰ κ°œλ΄‰')
}

Array.prototype.map

μ •μ˜

map 은 μ£Όμ–΄μ§„ λ°°μ—΄μ˜ λͺ¨λ“  μ›μ†Œμ— κ·œμΉ™μ„ μ μš©ν•œ μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•©λ‹ˆλ‹€.

νŠΉμ§• (μ€‘μš”πŸ‰)

map 은 μ£Όμ–΄μ§„ 배열을 λ³€ν˜•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

map 은 첫 callback ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κΈ° 직전에 μ£Όμ–΄μ§„ λ°°μ—΄μ˜ 볡사본을 μƒμ„±ν•©λ‹ˆλ‹€. λ•Œλ¬Έμ— callback ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” λ™μ•ˆμ— μ£Όμ–΄μ§„ 배열이 λ³€ν˜•λ˜μ–΄λ„ 결과에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

map 은 μ£Όμ–΄μ§„ λ°°μ—΄μ˜ λͺ¨λ“  μ›μ†Œμ— callback ν•¨μˆ˜λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€. λ”°λΌμ„œ 쀑간에 break or continue ν˜ΈμΆœμ€ λΆˆκ°€ν•©λ‹ˆλ‹€.

λ‹€μ‹œ 말해 map 은 반볡문이 μ•„λ‹™λ‹ˆλ‹€.

map 을 νƒˆμΆœν•˜λŠ” 방법은 μ—λŸ¬λ₯Ό throw ν•˜λŠ” κ²λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 방법을 λ˜λ„λ‘ μ‚¬μš©ν•˜μ§€ λ§ˆμ„Έμš”. for 문을 κ³ λ €ν•˜λŠ” 게 더 λ‚˜μ„μ§€λ„ λͺ¨λ¦…λ‹ˆλ‹€.

예제 1

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: λ°°μ—΄ numbers 의 λͺ¨λ“  μ›μ†Œμ— 2 λ₯Ό κ³±ν•œ μƒˆλ‘œμš΄ λ°°μ—΄ result λ₯Ό λ§Œλ“œμ„Έμš”.

λΆˆβ€”νŽΈ

const numbers = [1, 2, 3, 4, 5]
const result = []

// μž₯ν™©ν•©λ‹ˆλ‹€. πŸ‘Ž
for (let i = 0; i < numbers.length; i++) {
  result.push(numbers[i] * 2)
}

console.log(result) // -> [ 2, 4, 6, 8, 10 ]

νŽΈβ€”μ•ˆ βœ…

const numbers = [1, 2, 3, 4, 5]
const result = numbers.map(number => { return number * 2 })

console.log(result) // -> [ 2, 4, 6, 8, 10 ]

예제 2

πŸ‘‰ μ‹œλ‚˜λ¦¬μ˜€: λ°°μ—΄ cities 의 λͺ¨λ“  μ›μ†Œμ— κ΄‘μ—­μ‹œ λ¬Έμžμ—΄μ„ 뒀에 뢙인 μƒˆλ‘œμš΄ λ°°μ—΄ metropolitanCities 을 λ§Œλ“œμ„Έμš”.

λΆˆβ€”νŽΈ

const cities = ['λΆ€μ‚°', 'λŒ€κ΅¬', '인천', 'κ΄‘μ£Ό']
const metropolitanCities = []

// μž₯ν™©ν•©λ‹ˆλ‹€. πŸ‘Ž
for (let i = 0; i < cities.length; i++) {
  metropolitanCities.push(cities[i] + 'κ΄‘μ—­μ‹œ')
}

console.log(metropolitanCities) // -> [ 'λΆ€μ‚°κ΄‘μ—­μ‹œ', 'λŒ€κ΅¬κ΄‘μ—­μ‹œ', 'μΈμ²œκ΄‘μ—­μ‹œ', 'κ΄‘μ£Όκ΄‘μ—­μ‹œ' ]

νŽΈβ€”μ•ˆ βœ…

const cities = ['λΆ€μ‚°', 'λŒ€κ΅¬', '인천', 'κ΄‘μ£Ό']
const metropolitanCities = cities.map(city => { return `${city}κ΄‘μ—­μ‹œ` }) // πŸ‘

console.log(metropolitanCities) // -> [ 'λΆ€μ‚°κ΄‘μ—­μ‹œ', 'λŒ€κ΅¬κ΄‘μ—­μ‹œ', 'μΈμ²œκ΄‘μ—­μ‹œ', 'κ΄‘μ£Όκ΄‘μ—­μ‹œ' ]

μ’€ 더 μ‹¬ν”Œν•˜κ²Œ βœ…

const cities = ['λΆ€μ‚°', 'λŒ€κ΅¬', '인천', 'κ΄‘μ£Ό']
const metropolitanCities = cities.map(city => `${city}κ΄‘μ—­μ‹œ`) // πŸ‘

console.log(metropolitanCities) // -> [ 'λΆ€μ‚°κ΄‘μ—­μ‹œ', 'λŒ€κ΅¬κ΄‘μ—­μ‹œ', 'μΈμ²œκ΄‘μ—­μ‹œ', 'κ΄‘μ£Όκ΄‘μ—­μ‹œ' ]

About

🌟 λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 점차 ν˜„λŒ€μ μ΄κ³  μ‹€μš©μ μœΌλ‘œ λ³€ν™”ν•˜κ³  μžˆλŠ” ECMAScript 에 μ μ‘ν•˜λŠ” 방법을 μ•Œλ €μ€λ‹ˆλ‹€.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •