본문으둜 κ±΄λ„ˆλ›°κΈ°

🌈 Chapter 6 : λ§€κ°œλ³€μˆ˜μ™€ return 문을 μ •λ¦¬ν•˜λΌ.

🎯 λ§€κ°œλ³€μˆ˜ 기본값을 μƒμ„±ν•˜λΌ.​

  • μ•„λž˜ μ½”λ“œμ—μ„œ μ‹€μˆ˜λ‘œ 두 번째 λ§€κ°œλ³€μˆ˜λ₯Ό λΉ λœ¨λ Έμ„ λ•Œ, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜μ— λͺ¨λ“  λ§€κ°œλ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • λ§€κ°œλ³€μˆ˜λ₯Ό μ„ νƒμ μœΌλ‘œ μ μš©ν•  수 있기 λ•Œλ¬Έμ΄λ‹€. λ§€κ°œλ³€μˆ˜λ₯Ό λˆ„λ½ν•˜λ©΄ 값은 undefinedκ°€ λœλ‹€.
function convertWeight(weight, ounces) {
const oz = ounces ? ounces / 16 : 0;
const total = weight + oz;
return total / 2.2;
}
  • μœ„ μ˜ˆμ œμ—μ„œ convertWeight(44, 8)을 ν•˜λ©΄ 20.22727...을 λ°˜ν™˜ν•œλ‹€.
  • λ˜ν•œ, convertWeight(6, 6)을 μ‹€ν–‰ν•˜λ©΄ 3이 λ°˜ν™˜λ  κ±° κ°™μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 2.9999....κ°€ λ‚˜μ˜¨λ‹€. (μ €λŠ” 2.8977272727272725 μ΄λ ‡κ²Œ λ‚˜μ˜΄..)
  • μ΄λŸ¬ν•œ μ΄μœ λŠ” 뢀동 μ†Œμˆ˜μ  μ—°μ‚° λ•Œλ¬Έμ΄λ‹€. (λͺ¨λ“  컴퓨터 κ³Όν•™μžκ°€ μ•Œμ•„μ•Ό ν•  뢀동 μ†Œμˆ˜μ  μ—°μ‚°)
  • 반올림 처리둜 뢀동 μ†Œμˆ˜μ  μ—°μ‚°κ³Ό μ‚¬μš©μžκ°€ μ˜ˆμƒν•˜λŠ” λ°˜ν™˜κ°’μ΄ μ–΄κΈ‹λ‚˜λŠ” 경우λ₯Ό 보완할 수 μžˆλ‹€.
  • λ°˜μ˜¬λ¦Όμ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ roundToDecimalPlaceλ₯Ό μž‘μ„±ν•˜μ˜€μ§€λ§Œ κΈ°λ³Έκ°’μœΌλ‘œ μ†Œμˆ˜μ  두 번째 μžλ¦¬κΉŒμ§€ λ‚˜μ˜€κ²Œ ν•˜λ €λ©΄ λ‹¨μˆœνžˆ λ§€κ°œλ³€μˆ˜ roundToκ°€ 참인지 ν™•μΈν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” λΆ€μ‘±ν•˜λ‹€.
  • κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λ§€κ°œλ³€μˆ˜λ‘œ 아무 값도 μ „λ‹¬λ˜μ§€ μ•Šμ•„ undefinedκ°€ λ˜μ§€λŠ” μ•ŠλŠ”μ§€ λͺ…μ‹œμ μœΌλ‘œ 확인해 μ€€λ‹€.
function convertWeight(weight, ounces, roundTo) {
const oz = ounces / 16 || 0;
const total = weight + oz;
const conversion = total / 2.2;
const round = roundTo === undefined ? 2 : roundTo;
return roundToDecimalPlace(conversion, round);
}
  • μ΄λ ‡κ²Œ μ½”λ“œκ°€ 점점 λ³΅μž‘ν•΄μ§€λŠ”λ° μœ„μ˜ μ½”λ“œλŠ” μƒˆλ‘œμš΄ λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•  λ•Œλ§ˆλ‹€ 기본값을 μ„€μ •ν•˜κΈ° μœ„ν•΄ μ‚Όν•­ μ—°μ‚°μžλ‚˜ 단락 평가λ₯Ό μΆ”κ°€ν•˜κ²Œ λœλ‹€.
  • κ·Έλ ‡μ§€λ§Œ λ§€κ°œλ³€μˆ˜ 기본값을 μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜ 검증을 μœ„ν•œ μ½”λ“œλ₯Ό μ΅œμ†Œν™”ν•  수 μžˆλ‹€.
  • λ§€κ°œλ³€μˆ˜ 기본값을 μ‚¬μš©ν•˜λ €λ©΄ λ§€κ°œλ³€μˆ˜λͺ… μ˜†μ— λ“±ν˜Έλ‘œ 기본값을 μ •μ˜ν•΄ μ€€λ‹€.
function convertWeight(weight, ounces = 0, roundTo = 2) {
const total = weight + oz;
const conversion = total / 2.2;
return roundToDecimalPlace(conversion, round);
}
  • ν•˜μ§€λ§Œ λ§€κ°œλ³€μˆ˜ 기본값이 μ™„λ²½ν•œ 해결책은 μ•„λ‹Œ 게 μ—¬μ „νžˆ λ§€κ°œλ³€μˆ˜ μˆœμ„œκ°€ μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • λ§Œμ•½ μ€‘κ°„μ˜ λ§€κ°œλ³€μˆ˜ ouncesκ°€ ν•„μš”ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ„ μ†Œμˆ˜μ  자릿수λ₯Ό μ§€μ •ν•˜λ €λ©΄ ounces μžλ¦¬μ— 0을 μž…λ ₯ν•΄μ•Ό ν•œλ‹€.
convertWeight(4, 0, 2);
  • 값을 μ „λ‹¬ν•˜κ³  싢지 μ•Šμ€ 경우, λ§€κ°œλ³€μˆ˜μ— undefinedλ₯Ό μ „λ‹¬ν•˜λ©΄ ν•¨μˆ˜κ°€ λ§€κ°œλ³€μˆ˜ 기본값을 μ‚¬μš©ν•œλ‹€.
  • ν•˜μ§€λ§Œ undefinedλ₯Ό μ „λ‹¬ν•˜κ²Œ 되면 μ‹€μˆ˜λ₯Ό 저지λ₯΄κΈ°κ°€ 쉽기 λ•Œλ¬ΈμΈλ° 예λ₯Ό λ“€μ–΄ null을 μ „λ‹¬ν•˜λ©΄ μ„€μ •ν•œ 기본값이 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 점이 μžˆλ‹€.
convertWeight(4, undefined, 2);

🎯 해체 ν• λ‹ΉμœΌλ‘œ 객체 속성에 μ ‘κ·Όν•˜λΌ.​

  • λ‹€μŒμ€ κ°μ²΄λŠ” 사진에 λŒ€ν•œ 정보이닀.
const landscape = {
title: 'Landscape',
photographer: 'Seungmin',
equipmemt: 'Cannon',
format: 'digital',
src: '/landscape-nm.jpg',
location: [32.7122222, -103.1405556],
};
  • μ•„λž˜ μ½”λ“œλŠ” κ°„λ‹¨ν•œ λ™μž‘μ— λΆˆν•„μš”ν•˜κ²Œ μˆ˜λ§Žμ€ 객체 할당을 ν•˜κ³  μžˆλ‹€.
function displayPhoto(photo) {
const title = photo.title;
const photographer = photo.photographer || 'Anonymous';
const location = photo.location;
const url = photo.src;
const copy = {...photo};

delete copy.title;
delete copy.photographer;
delete copy.location;
delete copy.src;

const additional = Object.keys(copy).map(key => `${key}:${copy[key]}`);

//...μƒλž΅
}
  • ν•˜μ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 해체 ν• λ‹Ήμ΄λΌλŠ” 과정을 톡해 객체에 μžˆλŠ” 정보λ₯Ό κ³§λ°”λ‘œ λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλ‹€.
  • 해체 ν• λ‹Ή μž‘λ™ μ›λ¦¬λŠ” λ¨Όμ € 객체에 μžˆλŠ” 킀와 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜κ³ , 객체에 μžˆλŠ” 킀에 μ—°κ²°λœ 값을 μƒμ„±ν•œ λ³€μˆ˜μ˜ κ°’μœΌλ‘œ ν• λ‹Ήν•œλ‹€.
  • μ•„λž˜ 예제 μ½”λ“œλŠ” photographerλ₯Ό ν‚€λ‘œ κ°–λŠ” 객체가 있고, 이 객체λ₯Ό μ΄μš©ν•΄μ„œ 이름이 photographer인 λ³€μˆ˜λ₯Ό μƒμ„±ν•œλ‹€.
const landscape = {
photographer: 'Seungmin',
};
const { photographer } = landscape;
photographer;
// Seungmin
  • 값을 ν• λ‹Ήν•˜λŠ” λ³€μˆ˜μ˜ 이름은 객체에 μžˆλŠ” 킀와 λ°˜λ“œμ‹œ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€.
  • μ€‘κ΄„ν˜Έμ˜ μ˜λ―ΈλŠ” λ³€μˆ˜μ— ν• λ‹Ήλ˜λŠ” 값이 객체 μžˆλ‹€λŠ” 것을 λ‚˜νƒ€λ‚Έλ‹€.
  • λ§Œμ•½ 객체에 ν‚€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 값은 κ·Έμ € undefinedκ°€ λ˜μ§€λ§Œ, 해체 할당을 ν•˜λ©΄μ„œ λ™μ‹œμ— 기본값을 μ„€μ •ν•  μˆ˜λ„ μžˆλ‹€.
const landscape = {};
const { photographer = 'Anonymous' title } = landscape;
photographer;
// Anonymous
title;
// undefined
  • λ§Œμ•½ ν‚€ 이름을 λͺ¨λ₯΄λ©΄?? 객체에 λ‚¨μ•„μžˆλŠ” 정보λ₯Ό κ°€μ Έμ˜€λ €λ©΄?? 그럴 땐 μ„Έ 개의 λ§ˆμΉ¨ν‘œμ™€ λ³€μˆ˜ 이름을 μž‘μ„±ν•˜λ©΄ 이 μƒˆλ‘œμš΄ λ³€μˆ˜μ— μ–΄λ– ν•œ μΆ”κ°€ 정보라도 담을 수 μžˆλ‹€.
  • 정보λ₯Ό μˆ˜μ§‘ν•˜κΈ° μœ„ν•΄ λ§ˆμΉ¨ν‘œ μ„Έ 개λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” 펼침 μ—°μ‚°μž(spread operator)라고 λΆ€λ₯΄μ§€ μ•Šκ³ , μ΄λ•ŒλŠ” λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜(rest parameter)라고 λΆ€λ₯Έλ‹€.
  • μ—¬κΈ°μ„  λ³€μˆ˜ 이름을 ν‚€ 이름과 μΌμΉ˜ν•  ν•„μš” 없이 μ›ν•˜λŠ” λŒ€λ‘œ 지어도 λœλ‹€.
const landscape = {
photographer: 'Seungmin',
equipmemt: 'Cannon',
format: 'digital',
};

const {
photographer,
...additional
} = landscape;

additional;
// {equipmemt: "Cannon", format: "digital"}
  • μœ„ 예제처럼 κ°μ²΄μ—μ„œ κΊΌλ‚Έ photographerλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ ν‚€-κ°’ 쌍이 μƒˆλ‘œμš΄ 객체에 λ‹΄κΈ΄λ‹€.
  • μ•„λž˜ 예제처럼 λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ μ›λž˜μ˜ 킀와 λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ 지정할 μˆ˜λ„ μžˆλ‹€.
  • μ΄λŠ” ν‚€ 이름을 이미 λ‹€λ₯Έ λ³€μˆ˜μ—μ„œ μ‚¬μš©ν–ˆκ±°λ‚˜ ν‚€ 이름이 λ§ˆμŒμ— 듀지 μ•Šμ•„μ„œ μ’€ 더 μ μ ˆν•œ 이름을 λΆ™μ—¬μ•Ό ν•  λ•Œ μœ μš©ν•˜λ‹€.
const landscape = {
src: '/landscape-nm.jpg',
};
const { src: url } = landscape;

src;
// Uncaught ReferenceError: src is not defined
url;
// "/landscape-nm.jpg"
  • λ§ˆμ§€λ§‰μœΌλ‘œ 배열에도 해체 할당을 μ‚¬μš©ν•  수 μžˆλŠ”λ°, ν•œ 가지 큰 μ˜ˆμ™Έκ°€ μžˆλ‹€.
  • λ°°μ—΄μ—λŠ” ν‚€κ°€ μ—†κΈ° λ•Œλ¬Έμ— λ³€μˆ˜ 이름을 λ§ˆμŒλŒ€λ‘œ μ •ν•  수 μžˆμ§€λ§Œ, λŒ€μ‹  배열에 λ‹΄κΈ΄ μˆœμ„œλŒ€λ‘œ ν• λ‹Ήν•΄μ•Ό ν•œλ‹€λŠ” 점이닀.
  • 해체 할당은 배열에 값이 쌍으둜 담겨 μžˆμ–΄μ„œ λ‹΄κΈ΄ κ°’μ˜ μˆœμ„œκ°€ μ •λ³΄μ˜ 일뢀인 κ²½μš°μ—λ„ 맀우 μœ μš©ν•œ 방법이닀.
const landscape = {
location: [32.7122222, -103.1405556],
};
const { location } = landscape;
const [latitude, longitude] = location;

latitude; // 32.7122222
longitude; // -103.1405556
  • μœ„μ˜ 해체 ν• λ‹Ή 과정을 ν•œ 번으둜 μ•„λž˜μ™€ 같이 쀄일 수 μžˆλ‹€.
const { location: [latitude, longitude] } = landscape;

latitude; // 32.7122222
longitude; // -103.1405556
  • 처음의 예제λ₯Ό 해체 할당을 μ΄μš©ν•΄μ„œ μ•„λž˜μ™€ 같이 λ³€κ²½ν•  수 μžˆλ‹€.
function displayPhoto(photo) {
const {
title,
photographer = 'Anonymous',
location: [latitude, longitude],
src: url,
...other
} = photo;

const additional = Object.keys(copy).map(key => `${key}:${other[key]}`);

//...μƒλž΅
}
  • 해체 할당을 λ§€κ°œλ³€μˆ˜μ— μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ§€ μ•Šμ•„λ„ 마치 정보λ₯Ό ν•¨μˆ˜ λͺΈμ²΄μ—μ„œ ν• λ‹Ήν•œ κ²ƒμ²˜λŸΌ μž‘λ™ν•œλ‹€.
  • 참고둜 해체 할당은 let으둜 λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μž¬ν• λ‹Ήν•  μˆ˜λ„ μžˆλ‹€.
function displayPhoto({
title,
photographer = 'Anonymous',
location: [latitude, longitude],
src: url,
...other
}) {
const additional = Object.keys(copy).map(key => `${key}:${other[key]}`);

//...μƒλž΅
}
  • 해체 할당을 μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜ 할당에 κ΄€ν•œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ, λ§€κ°œλ³€μˆ˜λ‘œ 객체λ₯Ό μ „λ‹¬ν•˜κΈ° λ•Œλ¬Έμ— ν‚€-κ°’μ˜ μˆœμ„œλ₯Ό μ—Όλ €ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • λ˜ν•œ, λ‹€λ₯Έ ν‚€-κ°’ μŒμ„ κΊΌλ‚΄μ•Ό ν•˜λŠ” κ²½μš°μ—λ„ 해체 할당에 μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ 좩뢄해진닀. (λͺ…μ‹œμ μœΌλ‘œ equipmemtλ₯Ό ν• λ‹Ήν•˜λ €λŠ” κ²½μš°μ—λ„ λ³€μˆ˜ λͺ©λ‘μ— μƒˆ λ³€μˆ˜ 이름을 μΆ”κ°€ν•  뿐이닀.)
  • λ‹€λ₯Έ μ‹œμ μ—μ„œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 것도 κ±±μ •ν•  ν•„μš”λ„ 없어진닀. (λ‹€λ₯Έ 객체에 equipmemtκ°€ μ—†λŠ” κ²½μš°μ—λŠ” undefined둜 처리)
  • 해체 ν• λ‹Ήμ˜ μœ μΌν•œ 단점은 ν‚€-κ°’ 쌍 λ˜λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μΈ κ°μ²΄μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 점이닀.
  • λ§΅μ—μ„œλŠ” 해체 할당을 μ‚¬μš©ν•  수 μ—†μ§€λ§Œ 해체 할당은 ν•¨μˆ˜ 간에 정보λ₯Ό μ „λ‹¬ν•˜λŠ” κ²½μš°μ— μ‚¬μš©λ˜λ©°, 이 경우 값을 μˆœνšŒν•˜κ±°λ‚˜ μž¬ν• λ‹Ήν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ¬Έμ œκ°€ 될 것은 μ—†λ‹€.
  • 즉, 데이터가 μ •μ μ΄λ―€λ‘œ κ°μ²΄λŠ” 쒋은 선택이닀.

🎯 ν‚€-κ°’ 할당을 λ‹¨μˆœν™”ν•˜λΌ.​

  • κ°μ²΄μ—μ„œ 값을 κΊΌλ‚Ό λ•Œ μ‚¬μš©ν•œ 기법을 κ·ΈλŒ€λ‘œ 거꾸둜 μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜λŠ” κ°„κ²°ν•˜κ³  예츑 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.
  • μ•„λž˜λŠ” 사진 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 객체이고 μœ„μΉ˜ μ •λ³΄λ‘œ μœ„λ„μ™€ 경도가 담겨 μžˆμ§€λ§Œ, μ‹€μ œλ‘œ ν•„μš”ν•œ 것은 μ§€μ—­μ˜ 이름이라고 ν•˜μž.
const landscape = {
title: 'Landscape',
photographer: 'Seungmin',
location: [32.7122222, -103.1405556],
};
  • μ•„λž˜ μ½”λ“œλŠ” μ§€μ—­μ˜ 정보이닀.
const region = {
city: 'Daejoen',
county: 'Lea',
state: {
name: 'New Daejoen',
abbreviation: 'NM',
},
};
  • 이제 λ°˜ν™˜λœ κ°μ²΄μ—μ„œ λ„μ‹œ(city)와 μ£Ό(state)λ₯Ό κ°€μ Έλ‹€ μƒˆ 객체에 ν• λ‹Ήν•΄μ•Ό ν•œλ‹€.
  • λ³€μˆ˜μ™€ 이름이 같은 ν‚€λ₯Ό κ°–λŠ” ν‚€-κ°’ μŒμ„ 객체에 μΆ”κ°€ν•˜λ €λ©΄ λ³€μˆ˜ μ΄λ¦„λ§Œ 적으면 λœλ‹€.
  • κΈ°μ‘΄ 방법과 ν˜Όμš©ν•˜μ—¬ νŠΉμ • ν‚€-κ°’ μŒμ€ λ³€μˆ˜ 이름과 λ™μΌν•˜κ²Œ ν• λ‹Ήν•˜κ³ , λ‹€λ₯Έ 것은 기쑴처럼 콜둠으둜 ν• λ‹Ήν•  수 μžˆλ‹€.
function getCityAndState({ location }) {
// determineCityAndState 헬퍼 ν•¨μˆ˜
const { city, state } = determineCityAndState(location);
return {
city, // 단좕 속성λͺ…μœΌλ‘œ μΆ”κ°€
state: state.abbreviation, // 기쑴의 ν‚€-κ°’ ν• λ‹Ή 방법을 μ‚¬μš©
};
// {
// city: 'Daejoen',
// state: 'NM',
// }
}
  • λ§Œμ•½ κ°μ²΄μ—μ„œ ν•œ 가지 μ •λ³΄λ§Œ μ œκ±°ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” κ·ΈλŒ€λ‘œ μœ μ§€ν•˜λ €λ©΄ 객체 펼침 μ—°μ‚°μžμ™€ 일반적인 ν‚€-κ°’ 할당을 ν•¨κ»˜ μ‚¬μš©ν•΄μ„œ ν•œ 가지 정보λ₯Ό μ œκ±°ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” κ·ΈλŒ€λ‘œ μœ μ§€ν•  수 μžˆλ‹€.
  • μ•„λž˜ μ½”λ“œλ₯Ό 보면 location μ΄μ™Έμ˜ λͺ¨λ“  것을 λ³€μˆ˜ details에 ν• λ‹Ήν–ˆλ‹€.
  • μ΄λ ‡κ²Œ 되면 location μ΄μ™Έμ˜ κ°’λ§Œ details에 λ‹΄κΈ°κ²Œ λ˜μ–΄ return될 λ•Œ location은 빠지고 return되게 λœλ‹€.
function setRegion({ location, ...details }) {
const { city, state } = determineCityAndState(location);
return {
city,
state: state.abbreviation,
...details
}
}
// {
// title: 'Landscape',
// photographer: 'Seungmin',
// city: 'Daejoen',
// state: 'NM',
// }

🎯 λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ‘œ μ—¬λŸ¬ 개의 인수λ₯Ό λ³€μˆ˜λ‘œ μ „λ‹¬ν•˜λΌ.​

  • 전체 개수λ₯Ό μ•Œ 수 μ—†λŠ” λΉ„μŠ·ν•œ λ§€κ°œλ³€μˆ˜λ“€μ€ μ–΄λ–»κ²Œ 처리λ₯Ό ν• κΉŒ?
  • μ•„λž˜ μ½”λ“œλŠ” κ°„λ‹¨ν•˜κ²Œ 크기와 νƒœκ·Έ 배열을 λ°›λŠ” μœ νš¨μ„± 검사 ν•¨μˆ˜μ΄κ³ , 이 ν•¨μˆ˜λŠ” λͺ¨λ“  νƒœκ·Έκ°€ 쑰건을 ν†΅κ³Όν•˜λ©΄ trueλ₯Ό λ°˜ν™˜ν•œλ‹€.
function validateCharacterCount(max, items) {
return items.every(item => item.length < max);
}

validateCharacterCount(10, ['Hobbs', 'Eagles']);
// true
  • 이 μ½”λ“œμ˜ μœ μΌν•œ 단점은 μ‚¬μš©μžμ—κ²Œ νŠΉμ •ν•œ μ»¬λ ‰μ…˜ ν˜•μ‹μ„ κ°•μ œν•œλ‹€λŠ” 것이닀.
validateCharacterCount(10, 'wvoquine'); 
// Uncaught TypeError: items.every is not a function
  • μ˜ˆμ „μ—λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžλ“€μ΄ λ‚΄μž₯된 arguments 객체λ₯Ό μ΄μš©ν•΄ 문제λ₯Ό ν•΄κ²°ν–ˆλ‹€.
  • arguments κ°μ²΄λŠ” ν•¨μˆ˜μ— μ „λ‹¬λœ λͺ¨λ“  인수λ₯Ό 담은 λ°°μ—΄κ³Ό μœ μ‚¬ν•œ κ±Έλ ‰μ…˜μ΄λ‹€.
function getArguments() {
return arguments;
}
getArguments('Bloomsday', 'June 16');
// Arguments(2)Β ["Bloomsday", "June 16", callee: Ζ’, Symbol(Symbol.iterator): Ζ’]
  • argumentsλŠ” κ°μ²΄μ΄λ―€λ‘œ λ°°μ—΄λ‘œ λ³€ν™˜ν•΄μ•Όν•œλ‹€.
  • μ •ν™•ν•˜κ²Œ λ§ν•˜λ©΄, λ°°μ—΄ μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ Array 객체에 μ •μ μœΌλ‘œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.
  • Array와 λΉ„μŠ·ν•˜μ§€λ§Œ, length λΉΌκ³ λŠ” pop()κ³Ό 같은 μ–΄λ–€ Array 속성도 μ—†μœΌλ‚˜ μ‹€μ œ Array둜 λ³€ν™˜ν•  수 μžˆλ‹€.
function validateCharacterCount(max) {
const items = Array.prototype.slice.call(arguments, 1);
return items.every(item => item.length < max);
}
  • μ΄λ ‡κ²Œ ν•˜λ©΄ μ›ν•˜λŠ” 만큼 인수λ₯Ό 전달할 수 μžˆλ‹€.
  • κ·Έλ ‡λ‹€λ©΄ 전달할 μΈμˆ˜κ°€ 이미 배열인 κ²½μš°μ—λŠ” 인수λ₯Ό λ°°μ—΄λ‘œ μ „ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 인수 λͺ©λ‘μœΌλ‘œ λ³€ν™˜ν•΄μ„œ 전달해야 ν•œλ‹€.
  • μΈμˆ˜μ—λ„ 펼침 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— 즉, λ§€κ°œλ³€μˆ˜λ₯Ό λͺ©λ‘μœΌλ‘œ μˆ˜μ§‘ν•˜λŠ” 경우 λ¬Έμžμ—΄μ΄λ‚˜ 배열을 μ‰½κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.
validateCharacterCount(10, 'wvoquie'); // true

const tags = ['Hobbs', 'Eagles'];
validateCharacterCount(10, ...tags); // true
  • ν•˜μ§€λ§Œ 이 방법 λ˜ν•œ κ°€μž₯ 큰 λ¬Έμ œλŠ” arguments 객체λ₯Ό λ‹€λ£¨λŠ” 문법이 λ‚œν•΄ν•˜λ‹€λŠ” 점이닀.
  • λ˜ν•œ, arguments 객체λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ— ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜λ‘œ 인수 λͺ©λ‘μ„ λ°›λŠ”λ‹€λŠ” 사싀을 μ•ŒκΈ°λ„ μ–΄λ ΅λ‹€.
  • λ‹€λ₯Έ κ°œλ°œμžκ°€ ν•¨μˆ˜ λͺΈμ²΄λ₯Ό μ‚΄νŽ΄λ΄μ•Ό ν•¨μˆ˜μ— 전달할 수 μžˆλŠ” 것이 무엇인지λ₯Ό μ•Œ 수 있기 λ•Œλ¬Έμ΄λ‹€.
  • 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
  • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ 인수 λͺ©λ‘μ„ 전달해 λ³€μˆ˜μ— 담을 수 μžˆλ‹€.
function getArguments(...args) {
return args;
}
getArguments('Bloomsday', 'June 16'); // ["Bloomsday", "June 16"]
  • μœ„ 예제 μ½”λ“œμ²˜λŸΌ λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.
function validateCharacterCount(max, ...items) {
return items.every(item => item.length < max);
}
validateCharacterCount(10, 'wvoquie'); // true
validateCharacterCount(10, ...['wvoquie']); // true

const tags = ['Hobbs', 'Eagles'];
validateCharacterCount(10, ...tags); // true

validateCharacterCount(10,'Hobbs', 'Eagles'); // true
  • λ‹¨μˆœν•˜κ³  κ°„κ²°ν•  뿐만 μ•„λ‹ˆλΌ 예츑 κ°€λŠ₯성도 높아진 것을 확인할 수 μžˆλ‹€.
  • 인수λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ‡ 가지 이유
    1. 인수λ₯Ό λ°°μ—΄λ‘œ λ‹€λ£¨λŠ” 것을 λ‹€λ₯Έ κ°œλ°œμžλ“€μ—κ²Œ μ•Œλ €μ•Ό ν•˜λŠ” 경우
    2. λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λŠ” μ½”λ“œ 디버깅에 쒋은 방법이 될 수 μžˆλ‹€.
    3. λ‚˜λ¨Έμ§€ μΈμˆ˜λŠ” ν•¨μˆ˜ 간에 속성을 μ „λ‹¬ν•˜λ©΄μ„œ ν•΄λ‹Ή 속성을 μ‘°μž‘ν•  ν•„μš”κ°€ 없을 λ•Œ μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.
  • λ§ˆμ§€λ§‰μœΌλ‘œ λ§€κ°œλ³€μˆ˜κ°€ λ§€κ°œλ³€μˆ˜λ§Œμ„ μœ„ν•œ 것은 μ•„λ‹ˆλΌλŠ” 점을 κΈ°μ–΅ν•˜μž.
  • 객체의 ν‚€-κ°’ μŒμ΄λ‚˜ 배열에 λ‹΄κΈ΄ λ‚˜λ¨Έμ§€ 값을 κ°€μ Έμ˜¬ λ•Œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μΈμˆ˜μ— λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우의 μœ μΌν•œ 단점은 μ–Έμ œλ‚˜ λ§ˆμ§€λ§‰ μΈμˆ˜μ— μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λŠ” 점이닀.
  • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ°˜λ“œμ‹œ ν•¨μˆ˜μ˜ λ§ˆμ§€λ§‰ λ§€κ°œλ³€μˆ˜μ—¬μ•Ό ν•œλ‹€.
  • 해체 ν• λ‹Ήμ˜ κ²½μš°μ—λ„ λ§ˆμ§€λ§‰ 값이어야 ν•œλ‹€.