[SEB_FE_45] 2023.04.18 / Javascript ๊ธฐ์ดˆ(1)

Kayยท2023๋…„ 4์›” 18์ผ
0

๐Ÿ“– [๊ฐ•์˜ ๋‚ด์šฉ ๋ฐ ๊ฐœ๋… ์ •๋ฆฌ]
๋ชฉ์ฐจ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€?
  • ํƒ€์ž…
  • ๋ณ€์ˆ˜
  • ์—ฐ์‚ฐ์ž
  • 2023.04.18 ๋ฆฌ๋ทฐ

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€?]

(์ถœ์ฒ˜) [๋ฒˆ์—ญ] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์—ญ์‚ฌ โ€“ ๊ณผ๊ฑฐ ์š”์•ฝ

(์ถœ์ฒ˜) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€? ์š”์•ฝ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์žฅ์ 

  • ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜๊ณ  ๊ธฐ๋ณธ ์–ธ์–ด๋กœ ์‚ฌ์šฉ๋จ
  • DOM ์กฐ์ž‘์„ ํ†ตํ•ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์›น์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

"Java Script?" No! "Javascript"

์ž๋ฐ”์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ๊ด€๋ จ์ด ์žˆ์„๊นŒ?
์ •๋‹ต์€ "์—†๋‹ค"์ด๋‹ค.
์ง€๊ธˆ๋„ ์œ ๋ช…ํ•˜์ง€๋งŒ ๊ทธ ๋‹น์‹œ ๋งŽ์ด ์“ฐ์˜€๋˜ ์ž๋ฐ” ์–ธ์–ด์˜ ์˜ํ–ฅ๋ ฅ์„ ํ™๋ณด๋กœ์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋ผ๊ณ  ํ•œ๋‹ค.
(์—ฌ๋‹ด: ์ž๋ฐ” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ "Java Script"๋ผ๊ณ  ํ•˜๋ฉด ๋งค์šฐ ๋™์š”ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๐Ÿคญ)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„

  • V8: Chrome๊ณผ Opera์—์„œ ์“ฐ์ž„
  • SpiderMonkey - Firefox์—์„œ ์“ฐ์ž„
  • Trident ๋˜๋Š” Chakra: IE์—์„œ ์“ฐ์ž„
  • ChakraCore: Microsoft Edge์—์„œ ์“ฐ์ž„
  • SquirrelFish: Saffari์—์„œ ์“ฐ์ž„

์˜ˆ๋ฅผ ๋“ค์–ด, "V8์—์„œ๋งŒ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ"์ด๋ผ๊ณ  ํ•˜๋ฉด chrome๊ณผ opera์—์„œ ๋ฐ–์— ์•ˆ์“ฐ์ด๋ฏ€๋กœ ์—”์ง„ ์ข…๋ฅ˜๋ฅผ ๊ธฐ์–ตํ•˜๋ฉด ์ข‹๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋“ค

  • Typescript: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž…์„ ๋ช…์‹œํ•˜๋„๋ก ํ•œ ์–ธ์–ด by Microsoft
  • Flow: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ž๋ฃŒํ˜•์„ ๋ช…์‹œํ•˜๋„๋ก ํ•œ ์–ธ์–ด by Facebook
  • CoffeScript: ์งง์€ ๋ฌธ๋ฒ•๊ณผ ์‰ฌ์šด ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋„๋ก ํ•œ ์–ธ์–ด (Ruby ๊ฐœ๋ฐœ์ž๋“ค์ด ์ข‹์•„ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!)
  • Dart: ๊ณ ์œ ์˜ ์—”์ง„์„ ๊ฐ€์ง„ ๋…์ž์  ์–ธ์–ด์ด๋ฉฐ ์›น๊ณผ ์•ฑ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ์–ธ์–ด by Google

[์ฝ”๋“œ ์—๋””ํ„ฐ]

  • StackBlitz
    ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํด๋ผ์šฐ๋“œ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
  • Visual Studio Code
  • Webstrom

ํƒ€์ž…

(์ถœ์ฒ˜) tistory - ์›์‹œ ํƒ€์ž…(primitive type) vs ์ฐธ์กฐ ํƒ€์ž…(preference type) ์š”์•ฝ

์›์‹œ ํƒ€์ž…์€ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ์Œ

  • ์˜ˆ) ๋ฌธ์ž, ์ˆซ์ž, null, symbol โ€ฆ

์ฐธ์กฐ ํƒ€์ž…์€ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ์—๋Š” ๊ฐ’์ด ์•„๋‹Œ '์ฃผ์†Œ'๋ฅผ ์ €์žฅ

  • ์˜ˆ) ๋ฐฐ์—ด, ๊ฐ์ฒด, ํ•จ์ˆ˜
  • ๋ณ€์ˆ˜๋Š” ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ฃผ์†Œ๋Š” ํŠน๋ณ„ํ•œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ ๋ณด๊ด€ํ•จ์— ๋ณด๊ด€๋˜๋Š”๋ฐ ์ด ๋ฐ์ดํ„ฐ ๋ณด๊ด€ํ•จ์„ย ๋ฉ”๋ชจ๋ฆฌ ํž™ย ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ’์„ ์žฌํ• ๋‹น ํ•  ๊ฒฝ์šฐ ์ฃผ์†Œ๋Š” ์ฐธ์กฐํ•œ ๋ชจ๋“  ๊ฐ’์ด ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ’์ด ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.

React์˜ hook ์ค‘ ํ•˜๋‚˜์ธ useEffect์—์„œ ์ฐธ์กฐ ํƒ€์ž…์ธ dependency์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

useEffect dependency์— ๋“ค์–ด๊ฐ„ ๋ณ€์ˆ˜ ํƒ€์ž…
์ˆ˜์ • ์ „) moment() ์ฆ‰, ํƒ€์ž…์ด objectOf(moment)
-> ์ฐธ์กฐํƒ€์ž… ๋ณ€์ˆ˜๋กœ date๊ฐ€ ์ˆ˜์ •๋˜์–ด๋„ useEffect๊ฐ€ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ

์ˆ˜์ • ํ›„) moment().format(โ€™YYYY-MM-DDโ€™) ์ฆ‰, ํƒ€์ž…์ด string
-> ์›์‹œํƒ€์ž… ๋ณ€์ˆ˜๋กœ date ์ˆ˜์ • ์‹œ useEffect๊ฐ€ ์ •ํ™•ํžˆ ๊ฐ์ง€ํ•จ

์ฐธ๊ณ ) 1.1 + 0.1์€ 1.2๊ฐ€ ์•„๋‹ˆ๋‹ค?

์œ ํŠœ๋ธŒ ์ฝ”๋”ฉ์• ํ”Œ ์ฑ„๋„ - ์œ„ ์ˆ˜์‹์ด ํ‹€๋ฆฐ ์ด์œ ๋Š”? (๊ฐœ๋ฐœ์ž ๋ฉด์ ‘ ํƒ€์ž„)

์ˆซ์žํ˜•

  • ์ •์ˆ˜ ๋ฐ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž
  • ํŠน๋ณ„ ์ˆซ์ž ๊ฐ’: Infinity, -Infinity, NaN
    • 1/0์€ ๋ฌดํ•œ๋Œ€(Infinity)๋ฅผ ์˜๋ฏธ
  • BigInt: (253-1)(9007199254740991) ๋ณด๋‹ค ํฐ ๊ฐ’ ํ˜น์€ -(253-1) ๋ณด๋‹ค ์ž‘์€ ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

๋ฌธ์žํ˜•

๋ถˆ๋ฆฐํ˜•

// ๋Œ€ํ‘œ์ ์ธ falsy ๊ฐ’
false
0
-0
0n
// ๋นˆ ๋ฌธ์ž์—ด
null
undefined
NaN
  • ์ฃผ์˜์‚ฌํ•ญ: [], {}์ฒ˜๋Ÿผ ์ฐธ์กฐํƒ€์ž…์˜ ๋นˆ ๊ฐ’์€ true

null ๊ฐ’

undefined ๊ฐ’

๊ฐ์ฒด์™€ ์‹ฌ๋ณผ

typeof ์—ฐ์‚ฐ์ž

  • ์ธ์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜
  • typeof null์€ object (ํ•˜์œ„ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋ถ€๋ถ„ ์œ ์ง€๋จ)

ํ˜•๋ณ€ํ™˜

  • ๋ฌธ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜ String(value)
  • ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜ Number(value)
  • ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ Boolean(value)

๋ณ€์ˆ˜

let๊ณผ const

  • let: ๋ณ€์ˆ˜ ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅ
  • const: ๋ณ€์ˆ˜ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒ์ˆ˜

๋ณ€์ˆ˜ ๋ช…๋ช… ๊ทœ์น™

  • ๋ณ€์ˆ˜๋ช…์— ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž: ๋ฌธ์ž์™€ ์ˆซ์ž, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํ˜ธ $์™€ ๊ธฐํ˜ธ _
  • ์ˆซ์ž๋กœ ๋ณ€์ˆ˜๋ช… ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Œ
  • ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ณ„
  • ์˜ˆ์•ฝ์–ด๋Š” ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ๋Œ€๋ฌธ์ž ์ƒ์ˆ˜๋Š” ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์ ์œผ๋กœ ์“ฐ์ผ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปจ๋ฒค์…˜
    • ex. const DEFAULT_COLOR = "#ff2222";
  • ๋ชจ๋“  ์–ธ์–ด๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์˜์–ด๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ

์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„

๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž

ํ• ๋‹น ์—ฐ์‚ฐ์ž ์ฒด์ด๋‹

let a, b, c;

a = b = c = 2 + 2;

๋ณตํ•ฉ ํ• ๋‹น ์—ฐ์‚ฐ์ž

let a = 1;

a += 1; // 2

์ฆ๊ฐ€/๊ฐ์†Œ ์—ฐ์‚ฐ์ž

  • ํ›„์œ„ํ˜• vs ์ „์œ„ํ˜•
let a = 1;
let b = ++a;

console.log(b); // 2

let c = 1;
let d = c++;

console.log(d); // 1
// ํ›„์œ„ํ˜•์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ’์ด ์ฆ๊ฐ€๋˜๊ธด ํ–ˆ์ง€๋งŒ, ์ฆ๊ฐ€ ์ „ ๊ธฐ์กด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ

๋น„ํŠธ ์—ฐ์‚ฐ์ž

์ฃผ๋กœ 2์ง„์ˆ˜์—์„œ ์‚ฌ์šฉ

  • ๋น„ํŠธ AND ( & )
  • ๋น„ํŠธ OR ( | )
  • ๋น„ํŠธ XOR ( ^ )
  • ๋น„ํŠธ NOT ( ~ )
  • ์™ผ์ชฝ ์‹œํ”„ํŠธ(LEFT SHIFT) ( << )
  • ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ(RIGHT SHIFT) ( >> )
  • ๋ถ€ํ˜ธ ์—†๋Š” ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ(ZERO-FILL RIGHT SHIFT) ( >>> )

์‰ผํ‘œ ์—ฐ์‚ฐ์ž

๋งˆ์ง€๋ง‰ ํ‘œํ˜„ ์‹์˜ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜๋จ

let a = (1+2, 3+4);
console.log(a); // 7

๋น„๊ต ์—ฐ์‚ฐ์ž

์ฃผ์˜์‚ฌํ•ญ: ๋น„๊ตํ•˜๋ ค๋Š” ๊ฐ’์˜ ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด ๊ฐ’๋“ค์„ ์ˆซ์žํ˜•์œผ๋กœ ๋ฐ”๊ฟ” ๋น„๊ต

์ผ์น˜ ์—ฐ์‚ฐ์ž

null์ด๋‚˜ undefined

alert( null === undefined ); // false
alert( null == undefined ); // true

null๊ณผ 0

alert( null > 0 );  // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true

[2023.04.18 ๋ฆฌ๋ทฐ]

์˜ค๋Š˜์€ ์•ž์œผ๋กœ ๊ณต๋ถ€ํ•  ๋•Œ ์‹œ๊ฐ„ ๋ฐฐ๋ถ„์„ ์ž˜ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๋ฐ˜์„ฑ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๋‚ ์ด์—ˆ๋‹ค.

๋†“์ณค๋˜ ๊ฐœ๋…๋“ค์„ ์œ„์ฃผ๋กœ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜๊ณ  ์‹ฌํ™” ๊ณต๋ถ€ ๋˜๋Š” ๊ณผ์ œ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค.

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