๋ฐ˜์‘ํ˜•

Numeric Separators


์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ์–ธ๋”์Šค์ฝ”์–ด _๋ฅผ ์ด์šฉํ•ด ์ˆซ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. KRW ํ™”ํ์ฒ˜๋Ÿผ ์ž๋ฆฌ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆซ์ž๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์œ ์šฉ

const cost = 100_000_000;
console.log(cost); // 100000000

 

  • _ ์–ธ๋”๋ฐ” ํ•œ๊ฐœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ex) 100__000 โŒ
  • ์ˆซ์ž ๋งˆ์ง€๋ง‰์—” ์‚ฌ์šฉ ๋ถˆ๊ฐ€ ex) 100_; โŒ
  • ๊ฐ€์žฅ ์•ž ์ˆซ์ž๊ฐ€ 0์ผ๋• ์‚ฌ์šฉ ๋ถˆ๊ฐ€ ex) 0_1; โŒ

 

replaceAll


replaceAll(substr, newSubstr)
replaceAll(substr, replacerFunction)

 

๋ฌธ์ž์—ด์—์„œ ์›ํ•˜๋Š” ๋ถ€๋ถ„์„ "๋ชจ๋‘" ์ง€์ •ํ•œ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •๊ทœ์‹๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

const sayHello = 'Hello, John';
sayHello.replaceAll('John', 'Smith'); // Hello, Smith
sayHello.replaceAll('John', () => 'Smith'); // Hello, Smith

 

Exponentiation assignment (์ง€์ˆ˜ํ• ๋‹น)


ES2016์— Math.pow()์™€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ** ๊ฑฐ๋“ญ์ œ๊ณฑ ์—ฐ์‚ฐ์ž๊ฐ€ ์ถ”๊ฐ€๋๋‹ค.

2 ** 3; // 8
Math.pow(2, 3); // 8

 

๊ฑฐ๋“ญ์ œ๊ณฑ ํ•˜๋ ค๋Š” ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

 

๐Ÿ’ก ๊ฑฐ๋“ญ์ œ๊ณฑ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋Š” ์ขŒ(ๅทฆ) ๊ฒฐํ•ฉ์„ฑ์„ ๊ฐ€์ง„๋‹ค. ๊ฑฐ๋“ญ์ œ๊ณฑ, ํ• ๋‹น ์—ฐ์‚ฐ์ž, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ์šฐ(ๅณ) ๊ฒฐํ•ฉ์„ฑ์„ ๊ฐ€์ง„๋‹ค. ๋‘ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฒฐํ•ฉ์„ฑ๊ณผ ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ์—ญ์‹œ ๊ฒฐํ•ฉ์„ฑ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

 

  • ์ขŒ๊ฒฐํ•ฉ์„ฑ(์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ) : (a ์—ฐ์‚ฐ์ž1 b) ์—ฐ์‚ฐ์ž2 c
  • ์šฐ๊ฒฐํ•ฉ์„ฑ(์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ) : a ์—ฐ์‚ฐ์ž1 (b ์—ฐ์‚ฐ์ž2 c)

 

2 ** 3 ** 2; // 512
// 2 ** (3 ** 2)์™€ ๊ฐ™์Œ

 

๊ฑฐ๋“ญ์ œ๊ณฑ ์—ฐ์‚ฐ์ž๋Š” ๋“ฑํ˜ธ =์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

let a = 1.5;
a **= 2;
// a = a * a์™€ ๊ฐ™์Œ

let b = 4;
b **= 3;
// b = b * b * b์™€ ๊ฐ™์Œ

 

Nullish coalescing operator (๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž)


?? ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฐ’์ด null ํ˜น์€ undefined๋ฉด ?? ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์™ผ์ชฝ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž.

const printMessage = (text) => {
  const message = text ?? 'RightExpression';
  console.log(message);
};

printMessage(undefined); // '**Right**Expression'
printMessage(null); // '**Right**Expression'
printMessage('LeftExpression'); // '**Left**Expression'
printMessage(''); // ''

 

์™ผ์ชฝ ๊ฐ’์ด falsy์ด๋ฉด(0 -0 '' NaN ๋“ฑ) ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” || OR ์—ฐ์‚ฐ์ž์™€ ๋‹ค๋ฅธ์  ์ฃผ์˜.

 

 

Logical Assignment Operators (ES2021)


ํŠน์ • ๋ณ€์ˆ˜์˜ ์ฐธ/๊ฑฐ์ง“ ์—ฌ๋ถ€์— ๋”ฐ๋ผ &&= ||= ??= ์—ฐ์‚ฐ์ž๋กœ ์›ํ•˜๋Š” ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • &&= : ๋ณ€์ˆ˜๊ฐ€ truthy์ผ ๋•Œ
  • ||= : ๋ณ€์ˆ˜๊ฐ€ falsy์ผ ๋•Œ
  • ??= : ๋ณ€์ˆ˜๊ฐ€ nullish(null | undefined) ์ผ ๋•Œ

 

๋ณ€์ˆ˜๊ฐ€ truthy ์ผ ๋•Œ &&=

// old JS
let a = 1;
if (a) {
  a = 2;
}

// new JS
let a = 1;
a &&= 2; // ๋ณ€์ˆ˜ a๊ฐ€ true๋ผ๋ฉด 2 ํ• ๋‹น
let a = 1;
let b = 0;

a &&= 2;
console.log(a); // 2 (๋ณ€์ˆ˜ a๊ฐ€ true์ด๋ฏ€๋กœ 2 ํ• ๋‹น)

b &&= 2;
console.log(b); // 0 (๋ณ€์ˆ˜ b๊ฐ€ true๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ฐ’ ๋ณ€ํ™” ์—†์Œ)

 

๋ณ€์ˆ˜๊ฐ€ falsy ์ผ ๋•Œ ||=

// old JS
let a = false;
if (!a) {
  a = true;
}

// new JS
let a = false;
a ||= true; // ๋ณ€์ˆ˜ a๊ฐ€ false๋ผ๋ฉด true ํ• ๋‹น
document.getElementById('lyrics').textContent ||= 'No lyrics.';
// #lyrics ์—˜๋ฆฌ๋จผํŠธ์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ๋นˆ๋ฌธ์ž์—ด(false)์ด๋ฉด 'No lyrics' ํ• ๋‹น
const a = { duration: 50, title: '' };
a.duration ||= 10;
console.log(a.duration); // 50 (duration ์†์„ฑ์ด false๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ฐ’ ๋ณ€ํ™” ์—†์Œ)

a.title ||= 'title is empty';
console.log(a.title); // title is empty (title ์†์„ฑ์ด false์ด๋ฏ€๋กœ ๊ฐ’ ์—…๋ฐ์ดํŠธ)

 

๋ณ€์ˆ˜๊ฐ€ nullish ์ผ ๋•Œ ??=

// old JS
let a = undefined;
if (a === undefined) {
  a = 'hello';
}

// new JS
let a = undefined;
a ??= 'hello';

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•