๐ŸŽฏ JavaScript์˜ ์ „๋ฐ˜์ ์ธ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.


๐Ÿ“— Today I Learned

Flow control

Flow control์€ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋ณ„ ๋ช…๋ น๋ฌธ, ๋ช…๋ น ๋˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ํ‰๊ฐ€๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

choice (์กฐ๊ฑด๋ฌธ)

์ผ๋ถ€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ผ๋ จ์˜ ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

If...else

  • ๋…ผ๋ฆฌ์กฐ๊ฑด์˜ ์ฐธ/๊ฑฐ์ง“์— ๋”ฐ๋ผ ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • if๋ฌธ์˜ ๋…ผ๋ฆฌ์กฐ๊ฑด์—๋Š” true, false๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์„ ๋Œ€์ž… ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ผ๋ฆฌ์กฐ๊ฑด์ด ์ฐธ์ธ ๊ฒฝ์šฐ, if ๋ธ”๋Ÿญ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ , ๊ฑฐ์ง“์ธ ๊ฒฝ์šฐ, else ๋ธ”๋Ÿญ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • false ๋กœ ํ‰๊ฐ€๋˜๋Š” ๊ฐ’ : false, undefined, null, 0, NaN, ""

  • else if๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋‹ค์ˆ˜์˜ ์กฐ๊ฑด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค” ๋น ๋ฅด๊ฒŒ if๋ฌธ์„ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ?

if...else๋ฌธ์ด ์•„๋‹Œ ์ค‘์ฒฉ if๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ nested contidional์„ ์ง€์–‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

before

const ์กฐ๊ฑด๋ฌธ = (์ธ์ž) => ์ธ์ž === 1;
const ์กฐ๊ฑด๋ฌธ2 = (์ธ์ž) => ์ธ์ž === 2;

const ํ•จ์ˆ˜ = (์ธ์ž) => {
  if (์กฐ๊ฑด๋ฌธ(์ธ์ž)) {
    return 1;
  } else if (์กฐ๊ฑด๋ฌธ2(์ธ์ž)) {
    return 2;
  } else return 3;
};

ํ•จ์ˆ˜(2);

after

const ์กฐ๊ฑด๋ฌธ = (์ธ์ž) => ์ธ์ž === 1;
const ์กฐ๊ฑด๋ฌธ2 = (์ธ์ž) => ์ธ์ž === 2;

const ํ•จ์ˆ˜ = (์ธ์ž) => {
  if (์กฐ๊ฑด๋ฌธ(์ธ์ž)) return 1; 
  if (์กฐ๊ฑด๋ฌธ2(์ธ์ž)) return 2; 
  return 3;
};

ํ•จ์ˆ˜(2);

switch

  • switch์— ๋ช…์‹œ๋œ ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•œ ํ›„, ํ‰๊ฐ€๋œ ๊ฐ’๊ณผ case ๋ผ๋ฒจ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” case ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ํ‰๊ฐ€๋œ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” case๋ฌด์ด ์—†์„ ๊ฒฝ์šฐ default์˜ ๋ช…๋ น๋ฌธ์ด ์‹คํ–‰๋˜๋„๋ก default๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const foo = (parameter) => {
  switch (parameter) {
    case 1:
      return 1;
    case 2:
      return 2;
    case 3:
      return 3;
    default: 
      return 0;
  }
};

foo(3); // 3


loop

์–ด๋–ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๋•Œ๊นŒ์ง€ ์ผ๋ จ์˜ ๋ช…๋ น๋ฌธ์„ 0ํšŒ ์ด์ƒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Conditional loop

์กฐ๊ฑด๋ถ€ loop๋Š” ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • while
    ์‹œ์ž‘ํ•  ๋•Œ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
let count = 0;
while (count > 3) {
  count++;
  console.log(count);
}

console.log('end');
// 1
// 2
// 3
// 'end'

  • do...while
    ๋งˆ์ง€๋ง‰์— ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์€ ํ•ญ์ƒ ํ•œ ๋ฒˆ ์ด์ƒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
let count = 0;
do {
  count++;
  console.log(count);
} while (count < 3);

console.log('end');

General loop

ํŠน์ • ๋ถ€๋ถ„ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  • for

    • ์ดˆ๊ธฐ๋ฌธ : loop ๋‚ด์— ์‚ฌ์šฉํ•  loop๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    • ์กฐ๊ฑด๋ฌธ : loop ๋‚ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•˜์—ฌ loop๋ฅผ ์ง€์†ํ• ์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

    • ์ฆ๊ฐ๋ฌธ : loop ๋‚ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ์‹คํ–‰๋˜๋Š” ๋ฌธ์žฅ์ž…๋‹ˆ๋‹ค.

for (let ๋ฃจํ”„๋ณ€์ˆ˜ = 0; ๋ฃจํ”„๋ณ€์ˆ˜ < 3; ๋ฃจํ”„๋ณ€์ˆ˜++) {
  console.log(๋ฃจํ”„๋ณ€์ˆ˜);
}

Collection loop

์ปฌ๋ ‰์…˜ ์•ˆ์˜ ํ•ญ๋ชฉ๋“ค์„ ํšก๋‹จํ•˜๋Š” ์ œ์–ดํ๋ฆ„๋ฌธ์ž…๋‹ˆ๋‹ค. for๋ฌธ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ช…์‹œ์ ์œผ๋กœ ๋ฃจํ”„๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • for...in
    ๊ฐ์ฒด์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ ์ด๋ฆ„(key) ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
const foo = {
  apple: '๐ŸŽ',
  banana: '๐ŸŒ'
};

for (const key in foo) {
  console.log(key);
}
// 'apple' 
// 'banana'  
  • for...of
    ๋ฐฐ์—ด, ๋ฌธ์ž์—ด ๋“ฑ iterable ๊ฐ์ฒด์˜ ๊ฐ’์„ ์ง์ ‘ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
const foo = 'apple';

for (const i of foo) {
  console.log(i);
}
// 'a' 
// 'p' 
// 'p' 
// 'l' 
// 'e' 



์ œ์–ด๋ฌธ

continue๋ฌธ

  • while, do...while, for๋ฌธ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ์•ˆ์ชฝ์˜ while, do...while, for๋ฌธ์„ ๋‘˜๋Ÿฌ์‹ผ ๋ฐ˜๋ณต์„ ์ข…๋ฃŒํ•˜๊ณ , ๋‹ค์Œ loop๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
const foo = () => {
  let count = 0;
  while (count < 3) {
    count++;
    console.log(count);
    continue;
    console.log('์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด');
  }
};

foo();
// 1
// 2
// 3

break๋ฌธ

  • ๋ฐ˜๋ณต๋ฌธ, switch๋ฌธ์„ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด while, do-while, for, switch๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ , ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
const foo = (type) => {
  switch (type) {
    case 'apple':
      console.log('๐ŸŽ');
    case 'banana':
      console.log('๐ŸŒ');
      break;
    default: 
      console.log('๐Ÿค”');
  }
  console.log('last');
};

foo('apple');
// '๐ŸŽ' ๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ , break๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— 'banana'๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.
// '๐ŸŒ' ๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ , break๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— default๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
// ๋ฐ˜๋ณต๋ฌธ์„ ๋‚˜์˜จ ํ›„, 'last'๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

return๋ฌธ

  • ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • return์„ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๋ฉฐ, ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
const findEvenNumber = (arr) => {
  for (let num of arr) {
    if (num % 2 === 0) {
      return num; 
    }
  }
  return '์ง์ˆ˜๊ฐ€ ์—†์Œ'; 
};

console.log(findEvenNumber([1, 3, 5, 6, 7])); // 6



Non-local control flow

throw๋ฌธ

์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. catch ๋ธ”๋Ÿญ์—์„œ ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ ์‹œ ๊ณผ์ •

  1. ํ˜„์žฌ ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

  2. ์—๋Ÿฌ ๊ฐ์ฒด์™€ ํ•จ๊ป˜ ์—๋Ÿฌ๊ฐ€ throw ๋ฉ๋‹ˆ๋‹ค.

  3. ์ œ์–ด ํ๋ฆ„์€ catch ๋ธ”๋ก์ด ์žˆ์œผ๋ฉด ์ „๋‹ฌ๋˜๊ณ , ์—†์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

const foo = () => {
  console.log(1);
  throw '์—ฌ๊ธฐ';
  console.log(2); // throw๋ฌธ ์ดํ›„์˜ ๋ช…๋ น๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 
};

foo(); 
// 1 
// Error: ์—ฌ๊ธฐ

Error ๊ฐ์ฒด

์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ Error ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const foo = () => {
  console.log(1);
  const customError = new Error();
  customError.name = 'ErrorName';
  customError.message = '์—๋Ÿฌ ๋ฐœ์ƒ';
  
  throw customError;
  
  console.log(2);
};

foo();

// 1
// ErrorName : ์—๋Ÿฌ ๋ฐœ์ƒ

try...catch

์ฝ”๋“œ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด์–ด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ ์ข…๋ฃŒ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

const foo = (value) => {
  if (value < 3) throw value;
  else console.log(value);
};

const bar = (value) => {
  try{
    foo(value);
  } catch (catchID) {
    console.log('catch', catchID);
  } finally {
    console.log('finally'); // ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
  }
};

bar(2); 
// 'catch' 2
// 'finally'



๊ฐ์ฒด์™€ ๋นŒํŠธ์ธ ๊ฐ์ฒด

๊ฐ์ฒด

๊ฐ์ฒด๋Š” ์†์„ฑ์„ ๊ฐ€์ง„ ๋…๋ฆฝ์ ์ธ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.

const foo = { // ๋ฆฌํ„ฐ๋Ÿด ํ‘œ๊ธฐ
  hello : 'JavaScript',
  happy : 'to meet you',
};

function Person (name, age) { // ์ƒ์„ฑ์ž ํ•จ์ˆ˜
  this.name = name;
  this.age = age;
}

new Person('Jason', 30);

const Person2 = { // Object.create
  name: 'Mickey',
  age: 25,
  getName: function () {
    console.log(this.name);
  },
};

const Joy = Object.create(Person2);
Joy.name = 'Joy';
Joy.getName(); // 'Joy'
  • ์†์„ฑ

    • property: ํ‚ค์™€ ๊ฐ’ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.

    • method: ๊ฐ์ฒด์— ์†ํ•ด์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ผ์ปซ๋Š” ๋ง์ž…๋‹ˆ๋‹ค.


  • ์†์„ฑ ๋‚˜์—ด ๋ฐฉ๋ฒ•

    • for...in

    • Object.keys(๊ฐ์ฒด)

    • Object.getOwnPropertyNames(๊ฐ์ฒด)


  • ๊ฐ์ฒด ๋น„๊ต
    ๊ฐ์ฒด๋ฅผ ์„œ๋กœ ๋น„๊ตํ•˜๋ฉด ์†์„ฑ๊ณผ ๊ฐ’์ด ๊ฐ™์€ ๊ฐ์ฒด์—ฌ๋„ ์ฐธ์กฐ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
const foo = {
  name: 'apple'
};

const bar = {
  name: 'apple'
};

console.log(foo === bar); // false

  • ์–•์€ ๋ณต์‚ฌ
    ๋ณต์‚ฌ๋œ ๊ฐ์ฒด์˜ ์†์„ฑ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ์–•์€ ๋ณต์‚ฌ๋ผ ํ•ฉ๋‹ˆ๋‹ค.
const person = { 
  name : 'Amy',
  age : 30,
};

// ์–•์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ• 2๊ฐ€์ง€
const joy = Object.assign({}, person);
const kei = { ...person };

joy.name = 'Joy';
kei.name = 'Kei';

console.log(joy === kei); // false
console.log(joy.age === kei.age); // true;

  • ๊นŠ์€ ๋ณต์‚ฌ
    ๋ณต์‚ฌ๋œ ๊ฐ์ฒด์˜ ์†์„ฑ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ์†์„ฑ์ด ์—†๋‹ค๋ฉด ๊นŠ์€ ๋ณต์‚ฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    • ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ๋ณต์‚ฌ

    • JSON.stringify




๊ธฐ์ดˆ ๊ฐ์ฒด

Number

์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์›์‹œ ๋ž˜ํผ Bulit-in ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜

    • Number.prototype

    • ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ: toFixed, toLocalString, ...


Math

์ˆ˜ํ•™์ ์ธ ์ƒ์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์œ„ํ•œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ Built-in ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ์†์„ฑ : PI, E, ...

  • ๋ฉ”์†Œ๋“œ : abs(), pow(), ceil(), ...


Date

1970๋…„ 1์›” 1์ผ UTC ์ž์ •๊ณผ์˜ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ์€ UTC ๊ธฐ์ค€์œผ๋กœ 9์‹œ๊ฐ„์ด ๋”ํ•ด์ง‘๋‹ˆ๋‹ค.

๐Ÿค” UTC๋ž€ ๋ฌด์—‡์ผ๊นŒ?

UTC๋Š” ๊ตญ์ œ ํ‘œ์ค€ ์‹œ๊ฐ„์˜ ํ˜‘์ • ์„ธ๊ณ„์‹œ๋กœ ๊ตญ์ œ์ ์ธ ํ‘œ์ค€ ์‹œ๊ฐ„์˜ ๊ธฐ์ค€์œผ๋กœ ์“ฐ์ด๋Š” ์‹œ๊ฐ์ž…๋‹ˆ๋‹ค. 1970๋…„๋„์— UTC ์ฑ„ํƒ์ด ๋˜๊ณ , ๊ทธ๋ฆฌ๋‹ˆ์น˜ ํ‰๊ท ์‹œ(GMT)์— ๊ธฐ๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์†์„ฑ: x

  • ๋ฉ”์†Œ๋“œ: now(), parse(), UTC()

const example = [
  Date.now(),
  Date.parse('March 27, 2025'),
  Date.UTC(2025, 03, 27),
];

example.forEach((item) => console.log(item));
// 1743087736192
// 1743087600000
// 1745798400000

const year = new Date().getFullYear() // 2025
const month = new Date().getMonth()+1; // 3, 1์›”์ด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1์„ ๋”ํ•ด ์คŒ
const day = new Date().getDate(); // 27
new Date().toLocaleString(); // '2025. 3. 27. ์˜คํ›„ 06:26:14'
new Date().toLocaleDateString(); // '2025. 3. 27.'

String

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์Œ๋”ฐ์˜ดํ‘œ("), ๋”ฐ์˜ดํ‘œ('), ๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค ์†์„ฑ : length

  • ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ

    • ์ ‘๊ทผ : at(), charAt(), charCodeAt(), codePointAt()

    • ์ฐพ๊ธฐ : indexOf(), lastIndexOf(), search()

    • ํฌํ•จ ์—ฌ๋ถ€: includes(), startWith(), endsWith(), match(์ •๊ทœํ‘œํ˜„์‹), matchAll(์ •๊ทœํ‘œํ˜„์‹)

    • ๋น„๊ต: localeCompare()

    • ๋ณ€๊ฒฝํ•˜๊ธฐ: toLocaleLowerCase(), toLocaleUpperCase(), toString(), replace(), replaceAll()

    • ์ถ”๊ฐ€ํ•˜๊ธฐ: padEnd(), padStart(), repeat()

    • ํ•ฉ์น˜๊ธฐ: concat(), +

    • ๋ถ„๋ฆฌํ•˜๊ธฐ: slice, substring(), split(), trim(), trimStart(), trimEnd()


const str = "Hello, ๐ŸŒ!";

console.log(str.at(1)); // "e"
console.log(str.charAt(1)); // "e"
console.log(str.charCodeAt(1)); // 101 (Unicode for 'e')
console.log(str.codePointAt(7)); // 127757 (Unicode for '๐ŸŒ')

// ------------------------------------

const text = "Hello world, welcome to the universe.";

console.log(text.indexOf("world")); // 6
console.log(text.lastIndexOf("o")); // 25
console.log(text.search(/welcome/i)); // 13 (๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ ์ •๊ทœํ‘œํ˜„์‹)

// ------------------------------------

const sentence = "JavaScript is awesome!";

console.log(sentence.includes("awesome")); // true
console.log(sentence.startsWith("Java")); // true
console.log(sentence.endsWith("!")); // true

console.log(sentence.match(/\w+/g)); // ["JavaScript", "is", "awesome"]
console.log([...sentence.matchAll(/\w+/g)]); 
// [ ["JavaScript"], ["is"], ["awesome"] ]


// ------------------------------------

console.log("apple".localeCompare("banana")); // -1 (์•ž ๋ฌธ์ž์—ด์ด ์‚ฌ์ „์ˆœ์œผ๋กœ ๋” ์•ž)
console.log("banana".localeCompare("apple")); // 1 (๋” ๋’ค)
console.log("apple".localeCompare("apple")); // 0 (๊ฐ™์Œ)


// ------------------------------------

const phrase = "Hello, How Are You?";

console.log(phrase.toLocaleLowerCase()); // "hello, how are you?"
console.log(phrase.toLocaleUpperCase()); // "HELLO, HOW ARE YOU?"

const number = 2025;
console.log(number.toString()); // "2025"

const message = "The sun is bright. The sun gives us light.";
console.log(message.replace("sun", "moon")); 
// "The moon is bright. The sun gives us light."

console.log(message.replaceAll("sun", "moon")); 
// "The moon is bright. The moon gives us light."

// ------------------------------------

const num = "5";

console.log(num.padStart(3, "0")); // "005"
console.log(num.padEnd(3, "0")); // "500"

console.log("Hi! ".repeat(3)); // "Hi! Hi! Hi! "

// ------------------------------------

const text = "  Hello, JavaScript!  ";

console.log(text.slice(2, 8)); // "Hello,"
console.log(text.slice(-10, -1)); // "JavaScript"

console.log(text.substring(2, 8)); // "Hello,"
console.log(text.substring(8, 2)); // "Hello," (start > end๋ฉด ์ž๋™์œผ๋กœ ๊ต์ฒด)

console.log(text.split(" ")); // ["", "", "Hello,", "JavaScript!", "", ""]
console.log(text.split(",", 2)); // ["  Hello", " JavaScript!  "]

console.log(text.trim()); // "Hello, JavaScript!"
console.log(text.trimStart()); // "Hello, JavaScript!  "
console.log(text.trimEnd()); // "  Hello, JavaScript!"

Regex

๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž์˜ ์กฐํ•ฉ ํŒจํ„ด์„ ์ฐพ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์Šฌ๋ž˜์‹œ(/)๋กœ ๊ฐ์‹ผ ํ˜•ํƒœ์ด๋ฉฐ, ํ”Œ๋ž˜๊ทธ(flags)๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

/ํŒจํ„ด(pattern)/ํ”Œ๋ž˜๊ทธ(flags)

๐Ÿ‘‰ ์ •๊ทœํ‘œํ˜„์‹์€ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!

Collection

Collection์€ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ๋“ค์˜ ๊ทธ๋ฃน์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Array

๋ฐฐ์—ด์€ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๋Œ€๊ด„ํ˜ธ([])๋กœ ๊ฐ์‹ธ์„œ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค ์†์„ฑ: length

  • ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ

    • ์š”์†Œ ์ ‘๊ทผ: at()

    • ์š”์†Œ ์ฐพ๊ธฐ : indexOf(), lastIndexOf()

    • ์š”์†Œ ํฌํ•จ ์—ฌ๋ถ€ : includes

    • ์š”์†Œ ํ™•์ธํ•˜๊ธฐ: forEach()

    • ์š”์†Œ ํŒ๋ณ„ํ•˜๊ธฐ : every(), some()

    • ์š”์†Œ ์ฐพ๊ธฐ : find(), findIndex()

    • ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ : push(), unshift()

    • ์š”์†Œ ์ œ๊ฑฐํ•˜๊ธฐ : pop(), shift()

    • ์š”์†Œ ๋ณ€๊ฒฝํ•˜๊ธฐ : flatMap(), map()

    • ์š”์†Œ ์ œ๊ฑฐํ•˜๊ธฐ : filter()

    • ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ : concat(), fill()

    • ๋ฐฐ์—ด ๋ถ„๋ฆฌํ•˜๊ธฐ : slice(), splice()

    • ๋ฐฐ์—ด ์žฌ๋ฐฐ์น˜ํ•˜๊ธฐ : reverse(), sort(),


Map

ํ‚ค์™€ ๊ฐ’์„ ์„œ๋กœ ๋งคํ•‘์‹œ์ผœ ์ €์žฅํ•˜๊ณ  ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ‚ค๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ์†์„ฑ์ด ์—†์–ด ๊ธฐ๋ณธ ์†์„ฑ๋“ค๊ณผ์˜ ์ถฉ๋Œ์ด ์—†์Šต๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

  • ํ‚ค, ๊ฐ’์Œ์˜ ๋นˆ๋ฒˆํ•œ ์ถ”๊ฐ€์ œ๊ฑฐ์—์„œ๋Š” Object๋ณด๋‹ค Map์ด ํผํฌ๋จผ์Šค๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.


Set

์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JSON

JavaScript Object Notation์œผ๋กœ ์ธํ„ฐ๋„ท์—์„œ ์ž๋ฃŒ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์ž๋ฃŒ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • ์ •์  ๋ฉ”์„œ๋“œ

    • JSON.stringify: ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • JSON.parse: ๋ฌธ์ž์—ด์—์„œ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

      • ๋ฌธ์ž์—ด์ด ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ try...catch๋กœ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.



์–ธ์–ด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜

ํ”„๋กœํ† ํƒ€์ž…

๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person('John');
person1.greet(); // "Hello, my name is John"
console.log(person1.constructor); // Person
  • ํ•จ์ˆ˜ ํƒ€์ž…์—๋งŒ prototype๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜์— ๋ถ€๋ชจ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด๋Š” [[Prototype]]์ด๋ผ๋Š” ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ด. ์ด๋ฅผ __proto__๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ถŒ์žฅ X)

  • constructor : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน์ˆ˜ํ•œ ์†์„ฑ์ž…๋‹ˆ๋‹ค.


class

ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์˜ ๋ฌธ๋ฒ•์  ์„คํƒ•(syntactic sugar)์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

constructor

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ์†๋œ ํŠน์ˆ˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ •์  ๋ฉ”์„œ๋“œ

ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์†์„ฑ

ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์บก์Аํ™”๋œ ๋ณ€์ˆ˜ = ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์†์„ฑ์€ this์— ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

getter

ํŠน์ • ์ธ์Šคํ„ด์Šค ์†์„ฑ์„ ์กฐํšŒํ•˜๋ฉฐ ์กฐ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. get ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฌด์กฐ๊ฑด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

setter

ํŠน์ • ์ธ์Šคํ„ด์Šค ์†์„ฑ์— ํ• ๋‹นํ•˜๋ฉฐ ์กฐ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. set ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

extends - ์ƒ์†

extends ์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด class์—์„œ ์ƒ์†์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Person {
  constructor(name, age) {
    this.name = name; // ์ธ์Šคํ„ด์Šค ์†์„ฑ
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  <}

  get fullName() {
    return `${this.name} Smith`; 
  }

  set fullName(value) {
    const [firstName] = value.split(' ');
    this.name = firstName;
  }

  static describe() {
    console.log("This is a Person class.");
  }
}


class Student extends Person {

  constructor(name, age, major) {
    super(name, age); // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ constructor ํ˜ธ์ถœ
    this.major = major;
  }

  greet() {
    super.greet(); // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ greet ํ˜ธ์ถœ
    console.log(`I major in ${this.major}.`);
  }
}

const student1 = new Student('Alice', 22, 'Computer Science');
student1.greet(); // "Hello, my name is Alice and I am 22 years old. I major in Computer Science."

Person.describe(); // "This is a Person class."

student1.fullName = "Bob";
console.log(student1.fullName); // "Bob Smith" 

this์™€ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

ํ˜„์žฌ ์–ด๋””์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€(์‹คํ–‰ ์ปจํ…์ŠคํŠธ)๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์–ด๋””์—์„œ ํ˜ธ์ถœ ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ this์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๐Ÿ‘‰ this์€ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!


์Šค์ฝ”ํ”„

๋ณ€์ˆ˜์˜ ํ™œ๋™ ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์Šค์ฝ”ํ”„์€ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!


์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ๊ฐ ์ฝ”๋“œ ๋ธ”๋ก์ด ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!


ํด๋กœ์ €

ํ•จ์ˆ˜ ์•ˆ์˜ ํ•จ์ˆ˜์—์„œ ์ƒ๊ธฐ๋Š” ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ํด๋กœ์ €๋Š” ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ ์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!




โœ๏ธ ํšŒ๊ณ 

ํ•˜๋ฃจ์— ๋งŽ์€ ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•˜๋А๋ผ ํž˜๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์™ธ ์ƒํ™ฉ์—์„œ๋„ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก try...catch๋กœ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ด์ ธ์•ผ๊ฒ ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

profile
๐ŸŒฑ๊ฐœ๋ฐœ ๊ธฐ๋ก์žฅ

0๊ฐœ์˜ ๋Œ“๊ธ€