[TIL] JavaScript Basics

AcidΒ·2021λ…„ 7μ›” 30일
0

πŸ“’ JavaScript

λͺ©λ‘ 보기
1/8
post-thumbnail

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 기초적인 λ‚΄μš©μΈ 데이터 νƒ€μž…κ³Ό λ³€μˆ˜ μ„ μ–Έ 및 할당에 λŒ€ν•œ λ‚΄μš©μž…λ‹ˆλ‹€ :)


πŸ’Ύ Data types

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 데이터 μ’…λ₯˜λŠ” κΈ°λ³Έ νƒ€μž…κ³Ό μ°Έμ‘° νƒ€μž…μœΌλ‘œ κ΅¬λΆ„λœλ‹€.

κΈ°λ³Έ νƒ€μž…(Primitive type)

: μ›μ‹œ μžλ£Œν˜•, μ›μ‹œ 데이터라고도 ν•˜λ©° λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값이닀.

  • μˆ«μžν˜•(Number) : 1 100
  • λ¬Έμžν˜•(String) : cat dog "1"
  • λ…Όλ¦¬ν˜•(Boolean) : true false
  • null : null
  • undefined : undefined

πŸ’‘ nullκ³Ό undefined의 차이점

  • 이 두 νƒ€μž… λͺ¨λ‘λŠ” 값이 μ—†μŒμ„ μ˜λ―Έν•˜μ§€λ§Œ, null의 κ²½μš°μ—” μ˜λ„μ μœΌλ‘œ 값이 λΉ„μ–΄μžˆμŒμ„ μ˜λ―Έν•˜κ³ , undefined의 κ²½μš°μ—” λ³€μˆ˜μ˜ μ„ μ–Έλ§Œ 이루어지고, 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ€ μƒνƒœμ΄λ‹€.

μ°Έμ‘° νƒ€μž…(Reference type)

: κ°’ 자체λ₯Ό λ³΅μ‚¬ν•˜λŠ” μ›μ‹œ νƒ€μž…κ³Ό 달리 μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν•œλ‹€.

  • λ°°μ—΄(Array) : [1, 'cat', true]
  • 객체(Object) : { a : 200 }
  • ν•¨μˆ˜(Function) : function sayHello() {}

πŸ”— λ³€μˆ˜μ™€ μ„ μ–Έ 및 ν• λ‹Ή

λ³€μˆ˜(variable)λž€ ν•˜λ‚˜μ˜ κ°’(데이터)을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•œλ‹€.

λ³€μˆ˜λŠ” 선언을 톡해 ν•΄λ‹Ή λ©”λͺ¨λ¦¬ 곡간을 λ§Œλ“€κ³ , 할당을 톡해 데이터λ₯Ό ν•΄λ‹Ή 곡간에 μ €μž₯ν•œλ‹€.

λ³€μˆ˜μ˜ μ„ μ–Έ

λ³€μˆ˜μ˜ 선언은 λ‹€μŒμ˜ μ„Έ 가지 λ°©λ²•μœΌλ‘œ 이루어진닀.

  • var
  • let
  • const

λ³€μˆ˜μ˜ 선언은 ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것과 μ—¬λŸ¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것 λͺ¨λ‘ κ°€λŠ₯ν•˜λ‹€.

// ν•˜λ‚˜μ˜ λ³€μˆ˜ μ„ μ–Έ
let a;

// μ—¬λŸ¬ λ³€μˆ˜ λ™μ‹œμ— μ„ μ–Έ
let a, b, c;

기쑴에 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜ 선언은 var둜 κ°€λŠ₯ν–ˆμœΌλ‚˜, ES6 λΆ€ν„° letκ³Ό constκ°€ μΆ”κ°€λ˜μ–΄ μ‚¬μš©λ˜κ³  μžˆλ‹€.

πŸ’‘ μ™œ letκ³Ό constλ₯Ό μ‚¬μš©ν•˜λŠ”κ°€

  • ν˜Έμ΄μŠ€νŒ…(Hoisting)κ³Ό μŠ€μ½”ν”„(Scope)에 λŒ€ν•œ κ°„λ‹¨ν•œ 이해

ν˜Έμ΄μŠ€νŒ…(Hoisting)

console.log(a); // output: undefined
var a = 'Hello, World';
console.log(a); // output: Hello, World

ν˜Έμ΄μŠ€νŒ…μ€ ν•¨μˆ˜ μ•ˆμ˜ 선언듀을 미리 ν›‘μ–΄ μ½”λ“œ μ΅œμƒλ‹¨μ— μ„ μ–Έν•˜λŠ” 것이닀.

μœ„ μ˜ˆμ‹œλ₯Ό 보면 varλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έλœ λ³€μˆ˜ aκ°€ μ„ μ–Έλ˜κΈ° 이전에 console.logλ₯Ό μ‹€ν–‰ν–ˆμŒμ—λ„, λΆˆκ΅¬ν•˜κ³  μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜μœΌλ©° undefinedλΌλŠ” 값을 λ°˜ν™˜ν•œλ‹€. μ΄λŠ” ν˜Έμ΄μŠ€νŒ…μ„ 톡해 μš°μ„ μ μœΌλ‘œ λ³€μˆ˜ μ„ μ–Έ λΆ€λΆ„λ§Œ λΆ„λ¦¬ν•˜μ—¬ μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ ΈκΈ° λ•Œλ¬Έμ΄λ‹€.

비ꡐ적 과거의 κ²Œμ‹œλ¬Όμ—μ„œλŠ” ν˜Έμ΄μŠ€νŒ…μ΄ var λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨μˆ˜μ„ μ–Έλ¬Έμ—μ„œ 이루어진닀고 κΈ°μž¬λ˜μ–΄ μžˆλŠ”λ°, μ‹€μ œλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄λ‹ˆ letκ³Ό const, ν•¨μˆ˜ν‘œν˜„μ‹, ν™”μ‚΄ν‘œ ν•¨μˆ˜ λ“± μ „λΆ€ ν˜Έμ΄μŠ€νŒ…μ΄ λ˜μ—ˆλ‹€. μ–΄λŠ μ‹œμ  이후뢀터 μˆ˜μ •λœ λ“― 보인닀.

κ·ΈλŸ¬λ―€λ‘œ var, let, const, function, function*, class ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μ„ μ–Έν•œ λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±)λŠ” ν˜Έμ΄μŠ€νŒ…μ΄ λœλ‹€κ³  λ³΄λŠ” 것이 λ§žλŠ” 것 κ°™λ‹€.

μŠ€μ½”ν”„(Scope)

let a = 1; // a : μ „μ—­ λ³€μˆ˜
function local() {
  let b = 2; // b : 지역 λ³€μˆ˜
}

μœ νš¨λ²”μœ„μ˜ 의미λ₯Ό κ°–λŠ” μŠ€μ½”ν”„λŠ” 크게 μ½”λ“œ μ „ μ˜μ—­μ—μ„œ μ°Έμ‘° κ°€λŠ₯ν•œ μ „μ—­ μŠ€μ½”ν”„(Global scope)와 ν•¨μˆ˜ μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μ°Έμ‘° κ°€λŠ₯ν•œ 지역 μŠ€μ½”ν”„(Local scope)둜 κ΅¬λΆ„λœλ‹€.

λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— 따라 μŠ€μ½”ν”„κ°€ 정해지기 λ•Œλ¬Έμ—, μ „μ—­μ—μ„œ μ„ μ–Έλ˜λ©΄ μ „μ—­ λ³€μˆ˜(Global variable) 지역 λ‚΄ μ„ μ–Έ λ³€μˆ˜λŠ” 지역 λ³€μˆ˜(Local variable)이 λœλ‹€.

μœ„ 경우 λ³€μˆ˜ aλŠ” μ „μ—­ λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ½”λ“œ μ „μ—­μ—μ„œ μ°Έμ‘°ν•  수 μžˆμ§€λ§Œ, λ³€μˆ˜ bλŠ” ν•¨μˆ˜ local μ•ˆμ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλ‹€.

  • var와 let, const의 차이점

ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„μ™€ 블둝 레벨 μŠ€μ½”ν”„

varλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄λŠ”데 μ΄λŠ” λ³€μˆ˜μ˜ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜λŠ” 기쀀이 ν•¨μˆ˜λΌλŠ” μ˜λ―Έμ΄λ‹€.

function func() {
  if (true) {
    var a = 1;
  }
  a = 2;
  console.log(a);
}
func(); // output : 2

μž„μ˜λ‘œ λ§Œλ“  func ν•¨μˆ˜μ˜ if λ¬Έ μ•ˆμ—μ„œ λ³€μˆ˜ a의 선언이 μ΄λ£¨μ–΄μ‘Œμ§€λ§Œ, varλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄κΈ° λ•Œλ¬Έμ— if 블둝 λ°–μ—μ„œλ„ λ³€μˆ˜ a의 μ°Έμ‘°(μ ‘κ·Ό)κ°€ κ°€λŠ₯ν•˜λ‹€.

λ°˜λ©΄μ— letκ³Ό constλŠ” 블둝 레벨 μŠ€μ½”ν”„λ‘œ 블둝 λ‹¨μœ„λ‘œ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•œλ‹€.

function func() {
  if (true) {
    let a = 1;
  }
  a = 2;
  console.log(a);
}
func(); // output : ReferenceError : a is not defined 

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— let으둜 μ„ μ–Έλœ if 블둝 λ°–μ˜ λ³€μˆ˜ aλŠ” μ •μ˜κ°€ λ˜μ§€ μ•Šμ•˜λ‹€λŠ” κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€.

  • 정리

    varλŠ” ν•¨μˆ˜ 외뢀라면 μ „μ—­ λ³€μˆ˜μ— ν•΄λ‹Ήν•˜κ³ , 참쑰의 μ˜μ—­μ΄ 비ꡐ적 λ°©λŒ€ν•˜κΈ° λ•Œλ¬Έμ— λ””λ²„κΉ…μ˜ κ³Όμ •μ—μ„œ 원인 νŒŒμ•…μ˜ 어렀움을 μ£Όκ±°λ‚˜, 쀑볡 μ„ μ–Έ κ°€λŠ₯으둜 인해 μ˜ˆμΈ‘ν•˜μ§€ λͺ»ν•œ κ°’μ˜ λ°˜ν™˜μ΄ 이루어 질 수 있기 λ•Œλ¬Έμ— λ¬Έμ œκ°€ λœλ‹€. κ·ΈλŸ¬λ―€λ‘œ μž¬μ„ μ–Έμ΄ λΆˆκ°€λŠ₯ν•˜κ³  블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•˜λŠ” letκ³Ό constλ₯Ό μ‚¬μš©ν•¨μ΄ λ°”λžŒμ§ν•˜λ‹€.

    βœ”οΈ 좔가적인 λ‚΄μš© : letκ³Ό const의 차이점

    ꡬ뢄letconst
    μž¬μ„ μ–ΈXX
    μž¬ν• λ‹ΉOX

πŸ”– 좜처

ν˜Έμ΄μŠ€νŒ… 및 μŠ€μ½”ν”„ - MJ Kim's GitHub.io
μŠ€μ½”ν”„ - Poiemaweb


λ˜ν•œ, λ³€μˆ˜ μ„ μ–Έ κ³Όμ • 쀑 λ³€μˆ˜λͺ…을 μž‘μ„±ν•˜λŠ” κ³Όμ •μ—μ„œ μ‹λ³„μž κ·œμΉ™μ„ μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€.

πŸ’‘ μ‹λ³„μž(Identifier)

μ‹λ³„μž(Identifier)λž€ 이름을 뢙일 λ•Œ μ‚¬μš©ν•˜λŠ” 단어닀.

λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… 속성λͺ…, λ©”μ†Œλ“œλͺ… 등이 이에 ν•΄λ‹Ήν•˜κΈ°μ—, λ³€μˆ˜ 이름 μž‘μ„±μ— μžˆμ–΄μ„œλ„ λ‹€μŒμ˜ μ‹λ³„μž μž‘μ„± κ·œμΉ™μ— λ”°λΌμ•Όν•œλ‹€.

πŸ““ μ‹λ³„μž κ·œμΉ™

  • ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.
    • ν‚€μ›Œλ“œ : μ œμ–΄λ¬Έμ˜ μ‹œμž‘κ³Ό 끝, νŠΉμ •ν•œ μ‘°μž‘ λͺ©μ  λ“±μœΌλ‘œ μ“°μ΄λŠ” 단어
    • ex) break , for , function λ“±
  • 첫 번째 κΈ€μžλŠ” 문자, μ–Έλ”μŠ€μ½”μ–΄(_), λ‹¬λŸ¬μ‚¬μΈ($)으둜만 μ‹œμž‘ κ°€λŠ₯ν•˜λ‹€.
    = μˆ«μžλŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.
  • μ–Έλ”μŠ€μ½”μ–΄(_), λ‹¬λŸ¬μ‚¬μΈ($)λ₯Ό μ œμ™Έν•œ νŠΉμˆ˜λ¬ΈμžλŠ” μ‚¬μš© λΆˆκ°€λŠ₯ν•˜λ‹€.
  • 곡백은 ν¬ν•¨ν•˜μ§€ λͺ»ν•œλ‹€.

    μœ„μ™€ 같은 κ·œμΉ™μ— λΆ€ν•©ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
    λ˜ν•œ, μ‹λ³„μž 관둀에 λŒ€ν•œ λ‚΄μš©μœΌλ‘œ camelCase에 λŒ€ν•œ λ‚΄μš©μ΄ μžˆλ‹€.

    camelCase λž€ μ‹λ³„μž μž‘μ„± 쀑 ν•˜λ‚˜μΈλ°, μ‹λ³„μž 전체 쀑 첫 번째 단어λ₯Ό μ œμ™Έν•œ λͺ¨λ“  λ‹¨μ–΄μ˜ μ•žμžλ¦¬λ₯Ό λŒ€λ¬Έμžλ‘œ λ³€κ²½ν•˜λŠ” 방식이닀.

    예λ₯Ό λ“€λ©΄ myname μ΄λΌλŠ” λ³€μˆ˜λͺ…μ˜ 경우, myName이라고 μž‘μ„±ν•œλ‹€.

λ³€μˆ˜μ˜ ν• λ‹Ή

λ³€μˆ˜μ˜ 할당은 ν• λ‹Ήμ—°μ‚°μž(=)λ₯Ό 톡해 이루어지고, x = y 라면, y의 값을 x에 할당함을 μ˜λ―Έν•œλ‹€.

λ³€μˆ˜μ˜ 할당은 μ„ μ–Έκ³Ό 뢄리할 수 있으며, ν•œ λ²ˆμ— μ—¬λŸ¬ λ³€μˆ˜λ₯Ό 선언함과 λ™μ‹œμ— ν• λ‹Ήν•  수 μžˆλ‹€.

// μ„ μ–Έκ³Ό ν• λ‹Ή 뢄리
let a; // μ„ μ–Έ
a = 1; // ν• λ‹Ή
console.log(a); // output : 1

// ν•œ λ²ˆμ— μ—¬λŸ¬ λ³€μˆ˜λ₯Ό μ„ μ–Έκ³Ό λΆ„λ¦¬ν•˜μ—¬ ν• λ‹Ή
let b, c, d;
b = 1, c = 2, d = 3;
console.log(b, c, d); // output : 1 2 3

// ν•œ λ²ˆμ— μ—¬λŸ¬ λ³€μˆ˜λ₯Ό μ„ μ–Έκ³Ό λ™μ‹œμ— ν• λ‹Ή
let e = 1, f = 2, g = 3;
console.log(b, c, d); // output : 1 2 3

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 바와 같이 letκ³Ό constλŠ” μž¬ν• λ‹Ήμ˜ μ˜μ—­μ—μ„œ κ΅¬λΆ„λ˜λŠ”λ° μ΄λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

let a;
a = 1;
console.log(a); // output : 1
a = 2;
console.log(a); // output : 2
let a = 1;
console.log(a); // output : 1

let의 경우 λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό 할당을 λΆ„λ¦¬ν•˜μ—¬ 진행할 수 있고, μž¬ν• λ‹Ήλ„ κ°€λŠ₯ν•˜λ‹€. λ˜ν•œ, λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό 할당을 λ™μ‹œμ— μ§„ν–‰ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

const b; // SyntaxError : Const declarations require an initialization value
const b = 1;
b = 2 // TypeError: "b" is read-only

ν•˜μ§€λ§Œ, const의 경우 μ„ μ–Έκ³Ό λ™μ‹œμ— 값을 ν• λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜κ³ , μž¬μ„ μ–Έμ˜ κ²½μš°μ—λ„ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

이λ₯Ό κ΅¬λΆ„ν•˜μ—¬ letκ³Ό constλ₯Ό μ μ ˆν•œ μš©λ„μ— μ‚¬μš©ν•˜λ©΄ λœλ‹€!

πŸ““ μˆ˜μ • 둜그

μˆ˜μ • λ‚ μ§œλ‚΄μš©
210803μ„ μ–Έκ³Ό ν• λ‹Ή 뢄리 λ‚΄μš© 및 μ‹λ³„μž λ‚΄μš© μΆ”κ°€
210805μˆ˜μ • 둜그 ν‘œλ‘œ λ³€κ²½
profile
μ΄μœ μ— μ§‘μ°©ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ§€λ§μƒμž…λ‹ˆλ‹€ 🧐

2개의 λŒ“κΈ€

comment-user-thumbnail
2021λ…„ 8μ›” 2일

μ•ˆλ…•ν•˜μ„Έμš” μ‚°μ„±λ‹˜, λΈ”λ‘œκ·Έμ΄λ¦„ μ„ΌμŠ€μžˆλ„€μš”πŸ˜Š 첫 κ²Œμ‹œλ¬Όμ˜ 첫 λŒ“κΈ€λ‹¬λ‘œ μ™”μŠ΅λ‹ˆλ‹€!
λ‚΄μš© κΉ”λ”ν•˜κ²Œ 잘 정리해주신 것 κ°™λ„€μš”πŸ‘
빨리 κ°œκ°•ν•΄μ„œ λ΅™κ²Œλ˜λŠ” λ‚  기닀리고 μžˆκ² μŠ΅λ‹ˆλ‹€πŸ™Œ

1개의 λ‹΅κΈ€