๐Ÿ“š ES6

๐Ÿ“Œ Shorthand property names

const name = 'haesa';
const age = '22';
  
// ๐Ÿ’ฉ
const haesa1 = {
  name: name,
  age: age,
};

// โœจ
const haesa2 = {
  name,
  age,
};

์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ key์™€ value์˜ ์ด๋ฆ„์ด ๊ฐ™๋‹ค๋ฉด ํ•˜๋‚˜๋กœ ์ถ•์•ฝํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Destructuring Assignment

Object

// object
const student = {
 name: 'Anna',
 level: 1,
};

// ๐Ÿ’ฉ
const name = student.name;
const level = student.level;

// โœจ
const { name, level } = student;
const { name: studentName, level: studentLevel } = student;

์˜ค๋ธŒ์ ํŠธ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ๊ฐ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ ๋™์ผํ•œ ์ด๋ฆ„์˜ key๋ฅผ ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ๊ณ , ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋ฉด ๊ฐ key์— ๋งž๋Š” value๋“ค์ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ๋‹ค.

{}์•ˆ์— ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์˜ค๋ธŒ์ ํŠธ์˜ key๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด undefine์ด ํ• ๋‹น๋œ๋‹ค.

๋งŒ์•ฝ key๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฝœ๋ก (:) ๋’ค์— ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

 

ex)

name์—๋Š” name์ด๋ผ๋Š” key๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” value๊ฐ€, ์ฆ‰ 'Anna'๊ฐ€ ํ• ๋‹น๋˜๊ณ  level์—๋Š” 1์ด ํ• ๋‹น๋œ๋‹ค.

 

 

 

Array

// array
const animals = ['๐Ÿถ', '๐Ÿ˜ฝ'];

// ๐Ÿ’ฉ
const first = animals[0];
const second = animals[1];

// โœจ
const [first, second] = animals;

๋ฐฐ์—ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ  ๋ฐฐ์—ด์„ ํ• ๋‹นํ•ด์ฃผ๋ฉด ๊ฐ ์ธ๋ฑ์Šค ์ˆœ์„œ์— ๋งž๊ฒŒ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ๋‹ค.

 

ex) first์—๋Š” animals[0]๊ฐ€ second์—๋Š” animals[1]๊ฐ€ ํ• ๋‹น๋œ๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Spread Syntax

Object

// object copy
const obj1 = { key: 'key1' };
const obj2 = { key: 'key2' };
const obj3 = { ...obj1 };

// object merge
const dog1 = { dog: '๐Ÿ•' };
const dog2 = { dog: '๐Ÿถ' };
const dog = { ...dog1, ...dog2 };

์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์ƒˆ๋กœ์šด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ Spread Syntax๋ฅผ ์—ฐ๋‹ฌ์•„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ณ‘ํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋•Œ key๊ฐ€ ๋™์ผํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ฒŒ ๋˜๋ฉด ์ œ์ผ ๋’ค์— ์žˆ๋Š” ์š”์†Œ๊ฐ€ ์•ž์˜ ์š”์†Œ๋ฅผ ๋ฎ์–ด ์”Œ์šฐ๊ฒŒ ๋œ๋‹ค.

 

 

 

Array

// array copy
const array = [obj1, obj2];
const arrayCopy = [...array];
const arrayCopy2 = [...array, { key: 'key3' }];

// array concatenation
const fruits1 = ['๐Ÿ‘', '๐Ÿ“'];
const fruits2 = ['๐ŸŒ', '๐Ÿฅ'];
const fruits = [...fruits1, ...fruits2];

๋ฐฐ์—ด์•ˆ์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ์˜ค๋ธŒ์ ํŠธ์ธ ๊ฒฝ์šฐ ์˜ค๋ธŒ์ ํŠธ์˜ ์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•ด์˜จ๋‹ค.

์˜ค๋ธŒ์ ํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Spread Syntax๋ฅผ ์—ฐ๋‹ฌ์•„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋ณ‘ํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Default parameters

// ๐Ÿ’ฉ
function printMessage(message) {
  if (message == null) {
    message = 'default message';
  }
  console.log(message);
}

printMessage('hello');
printMessage();
    
// โœจ
function printMessage(message = 'default message') {
  console.log(message);
}

printMessage('hello');
printMessage();

ํ•จ์ˆ˜์— ์ธ์ž๊ฐ’์ด ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๋•Œ ๊ธฐ๋ณธ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

๋” ์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด ์ „๋‹ฌ๋œ ์ธ์ž์˜ ๊ฐ’์ด undefined์ด๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ์— default ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Ternary Operator

const isCat = true;

// ๐Ÿ’ฉ
let component;
if (isCat) {
  component = '๐Ÿ˜ธ';
} else {
  component = '๐Ÿถ';
}

// โœจ
const component = isCat ? '๐Ÿ˜ธ' : '๐Ÿถ';
console.log(isCat ? '๐Ÿ˜ธ' : '๐Ÿถ');

์ฐธ๊ณผ ๊ฑฐ์ง“์— ๋”ฐ๋ผ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Template Literals

const weather = '๐ŸŒค';
const temparature = '16°C';

// ๐Ÿ’ฉ
console.log('Today weather is ' + weather + ' and temparature is ' + temparature + '.');

// โœจ
console.log(`Today weather is ${weather} and temparature is ${temparature}.`);

๋ฐฑํ‹ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด๊ณผ ๋ณ€์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์— ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ${}์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 

 

 

๐Ÿ“š ES11

๐Ÿ“Œ Optional Chaining

const person1 = {
  name: 'Haesa',
  job: {
    title: 'S/W Engineer',
    manager: {
      name: 'Sara',
    },
  },
};
  
const person2 = {
  name: 'Sara',
};

 

// ๐Ÿ’ฉ๐Ÿ’ฉ๐Ÿ’ฉ๐Ÿ’ฉ๐Ÿ’ฉ๐Ÿ’ฉ
function printManager(person) {
  console.log(person.job.manager.name);
}
printManager(person1);
// printManager(person2);

person1์—๋Š” job์ด ์žˆ์ง€๋งŒ, person2์—๋Š” job์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— printManager์— person2๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์œ„ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ํ”„๋กœํผํ‹ฐ์— ์กฐ๊ฑด ์—†์ด ๊ทธ๋ƒฅ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค.

 

 

 

// ๐Ÿ’ฉ๐Ÿ’ฉ๐Ÿ’ฉ
function printManager(person) {
  console.log(
    person.job
      ? person.job.manager
        ? person.job.manager.name
        : undefined
      : undefined
  );
}
printManager(person1);
printManager(person2);

๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์—์„œ ์ •๋ฆฌํ•œ Ternery Operator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–จ๊นŒ?

Ternery Operator๋ฅผ ์ค‘์ฒฉํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

 

 

 

// ๐Ÿ’ฉ
function printManager(person) {
  console.log(person.job && person.job.manager && person.job.manager.name);
}
printManager(person1);
printManager(person2);

์ด๋ฒˆ์—” && ์ด์šฉํ•˜๋ฉด ์–ด๋–จ๊นŒ?

์•„๊นŒ๋ณด๋‹ค ๊น”๋”ํ•ด์กŒ์ง€๋งŒ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋“ค์ด ๋ˆˆ์— ๋ณด์ธ๋‹ค.

 

 

 

// โœจ
function printManager(person) {
  console.log(person.job?.manager?.name);
}
printManager(person1);
printManager(person2);

Optional Chaining์€ ์œ„ ์ฝ”๋“œ๋“ค์˜ ๋ฌธ์ œ์ ์„ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•ด์ค€๋‹ค.

person.job์ด ์žˆ์œผ๋ฉด manager์— ์ ‘๊ทผ, manager๊ฐ€ ์žˆ์œผ๋ฉด name์— ์ ‘๊ทผํ•ด์ค€๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Nullish Coalescing Operator

// Logical OR operator
// falsy: false, '', 0, null, undefined

const name = null;
const userName = name || 'Guest';
console.log(userName);

๊ฐ’์ด ๋ฌด์–ธ๊ฐ€ ์ œ๋Œ€๋กœ ํ• ๋‹น๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•ด์„œ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด || Operator๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

// ๐Ÿ’ฉ
const name = '';
const userName = name || 'Guest';
console.log(userName);

const num = 0;
const message = num || 'undefined';
console.log(message);

๊ทธ๋Ÿฐ๋ฐ ์œ„์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ''๊ณผ 0์ด ํ• ๋‹น๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด๋“ค์„ false๋กœ ํ‰๊ฐ€ํ•ด์„œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

// โœจ
const name = '';
const userName = name ?? 'Guest';
console.log(userName);

const num = 0;
const message = num ?? 'undefined';
console.log(message);

Nullish Coalescing Operator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ„ ์˜ˆ์ œ๋“ค๋ณด๋‹ค ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

?? operator ์•ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ null์ด๊ฑฐ๋‚˜ undefined๋ผ๋ฉด ?? operator ๋’ค์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

ex)

name์ด ์žˆ๋‹ค๋ฉด name์„ ์“ฐ๊ณ , ์—†๋‹ค๋ฉด 'Guest'

num์ด ์žˆ๋‹ค๋ฉด num์„ ์“ฐ๊ณ , ์—†๋‹ค๋ฉด 'undefined'

 

 

 

 

 

 

'JS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JS] ๋ถˆ๋ณ€์„ฑ๊ณผ ๊ฐ€๋ณ€์„ฑ  (0) 2022.06.30
[JS] Shallow Copy  (1) 2022.06.27
[JS] Getter์™€ Setter  (0) 2022.06.23
[JS] ํ•จ์ˆ˜์™€ ๋ฉ”๋ชจ๋ฆฌ  (0) 2022.06.19
๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!