language/javascript

data types, let vs var, hoisting

1. ๋ณ€์ˆ˜(Variable)

  • ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’
  • Mutable data type
  • let (added in ES6) ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ
  • block scope({ })๋‚ด: ์ง€์—ญ / block scope ์™ธ: ๊ธ€๋กœ๋ฒŒ
  • rw(read/write)

1-1. var

  • ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ
  • ๊ฐ’์„ ์„ ์–ธํ•˜๊ธฐ๋„ ์ „์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • block scope๊ฐ€ ์—†๋‹ค.

1-2. hoisting 

  • ์–ด๋””์— ์„ ์–ธํ–ˆ๋ƒ์— ๋”ฐ๋ผ ์ƒ๊ด€์—†์ด, ํ•ญ์ƒ ์„ ์–ธ์„ ์ œ์ผ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ฃผ๋Š” ๊ฒƒ
  • move declaration from bottom to top
  • var๋กœ ์„ ์–ธํ•œ ํ‘œํ˜„์‹์ด๋‚˜ function ์„ ์–ธ๋ฌธ ๋“ฑ์„ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ํ•ด๋‹น scope์˜ ๋งจ ์œ„๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ
    • ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ •์˜๋œ ๊ฒฝ์šฐ: ์„ ์–ธ์ด ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„๋กœ hoist
    • ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ์ •์˜๋œ ๊ฒฝ์šฐ: ์„ ์–ธ์ด ์ „์—ญ ์ปจํ…์ŠคํŠธ์˜ ์ตœ์ƒ์œ„๋กœ hoist
  • hoisting๋œ ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์„ ์–ธ์ด ํ• ๋‹น๊ณผ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์„ ์–ธ๋ถ€๋งŒ ์œ ํšจ ๋ฒ”์œ„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ hoist๋˜์–ด ๊ฐ€์žฅ ๋จผ์ € ํ•ด์„๋œ๋‹ค
    • var๋Š” block scope๊ฐ€ ์•„๋‹Œ, function scope์—์„œ ์œ ํšจํ•˜๋‹ค!
  • ์›์ธ: js ๋ณ€์ˆ˜ ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”(์„ ์–ธ๊ณผ ํ• ๋‹น)๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ

 

2. ์ƒ์ˆ˜(Constant)

  • ํ•œ ๋ฒˆ ํ• ๋‹นํ•˜๋ฉด, ๊ฐ’์ด ์ ˆ๋Œ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๊ฒƒ
  • pointer๊ฐ€ ์ž ๊ฒจ์žˆ์–ด์„œ, ํ• ๋‹น ํ›„ ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
  • Immutable data type
  • const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ
  • r(read only)

 

3. Variable types

  • primitive: ๋” ์ด์ƒ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์งˆ ์ˆ˜ ์—†์Œ, single item
    • number, string, boolean, null, undefined, symbol
  • object: single item๋“ค์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋ฌถ์–ด์„œ ํ•œ ๋‹จ์œ„(box)๋กœ ๊ด€๋ฆฌ
  • function

3-1. Number

  • js๋Š” ์ˆซ์ž์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด, number type์„ ์ด์šฉํ•ด์„œ ์ˆซ์ž๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
    • let a = 12; let b = 1.2;
    • ์œ„์™€ ๊ฐ™์ด number์ด๋ผ๋Š” data type์„ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
    • js์—์„œ๋Š” type์ด dynamicํ•˜๊ฒŒ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Special numeric values
    • infinity: ์–‘์ˆ˜๋ฅผ 0์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ
    • negativeInfinity(-infinity): ์Œ์ˆ˜๋ฅผ 0์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ
    • NaN: ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, string์„ ์ˆซ์ž๋กœ ๋‚˜๋ˆˆ ๊ฒƒ

3-2. String

  • js์—์„œ๋Š” ๋ฌธ์ž๋“  ๋ฌธ์ž์—ด์ด๋“  ๋ชจ๋‘ string type์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
  • template literals(string): `string ${value}`
    • const brendan = 'brendan';
      const helloBob = `hi ${brendan}!`; //template literals(string)
      console.log(`value: ${helloBob}, type: ${typeof helloBob}`);

3-3. Boolean

  • false: 0, null, undefined, NaN, ' '
  • true: false ์ด์™ธ์˜ ๋ชจ๋“  ๊ฐ’

3-4. null๊ณผ undefined

let nothing = null; // null
let x; // undefined

null์€ null๋กœ ๊ฐ’์ด ํ• ๋‹น๋œ ์ƒํƒœ์ด๊ณ , undefined๋Š” ์„ ์–ธ์€ ๋˜์—ˆ์œผ๋‚˜ ์•„๋ฌด๋Ÿฐ ๊ฐ’์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค.

3-5. Symbol

  • map์ด๋‚˜ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ
  • ๋™์‹œ๋‹ค๋ฐœ์ ์œผ๋กœ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์—์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฃผ๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ
  • const symbol1 = Symbol('id');
    const symbol2 = Symbol('id');
    console.log(symbol1 === symbol2); // false
    
    const gSymbol1 = Symbol.for('id');
    const gSymbol2 = Symbol.for('id');
    console.log(gSymbol1 === gSymbol2); // true
    
    console.log(`value: ${symbol1.description}, type: ${typeof symbol1}`);
  • Symbol์€ ๋ฐ”๋กœ ์ถœ๋ ฅ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, .description์„ ์ด์šฉํ•ด์„œ string ๋ณ€ํ™˜ ํ›„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

3-6. Object

  • ๋ฌผ๊ฑด, ๋ฌผ์ฒด๋“ค์„ ๋Œ€ํ‘œํ•  ์ˆ˜ ์žˆ๋Š” box ํ˜•ํƒœ
  • const ellie = { name: 'ellie', age: 20 } // const -> ๋‹ค๋ฅธ object๋กœ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
    ellie.age = 21;

 

4. Dynamic typing

  • js๋Š” ์„ ์–ธํ•  ๋•Œ ์–ด๋–ค type์ธ์ง€ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•  ๋•Œ(runtime) ํ• ๋‹น๋œ ๊ฐ’์— ๋”ฐ๋ผ์„œ type์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.
  • let text = 'hello';
    console.log(`value: ${text}, type: ${typeof text}`); // string
    
    text = 1;
    console.log(`value: ${text}, type: ${typeof text}`); // number
    
    text = '7' + 5;
    console.log(`value: ${text}, type: ${typeof text}`); // string
    
    text = '8' / '2';
    console.log(`value: ${text}, type: ${typeof text}`); // number

 

 

 

 

์ฐธ๊ณ :

- youtube ๋“œ๋ฆผ์ฝ”๋”ฉ by ์—˜๋ฆฌ

https://www.youtube.com/watch?v=OCCpGh4ujb8&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=3

- https://m.blog.naver.com/tcloe8/221549773024

 

 

 

 

 

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

Object  (0) 2021.11.25
ํด๋ž˜์Šค์™€ ์˜ค๋ธŒ์ ํŠธ์˜ ์ฐจ์ด์   (0) 2021.11.25
Function  (0) 2021.11.25
operator, if, for loop  (0) 2021.11.25
async์™€ defer  (0) 2021.11.25