🦁_21.12.03 TIL

BoriΒ·2021λ…„ 12μ›” 3일
3
post-thumbnail

21λ…„ 12μ›” 03일

πŸ“ Javascript

πŸ“Ž μžλ£Œν˜•(Data type)

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  값은 데이터 νƒ€μž…μ„ κ°–λŠ”λ‹€.

μ›μ‹œ νƒ€μž…(Primitive Type)

  • μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’(immatable value)이닀
  • μ›μ‹œ 값을 λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜(ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간)μ—λŠ” μ‹€μ œ 값이 μ €μž₯λœλ‹€.
  • μ›μ‹œ 값을 κ°–λŠ” λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ μ›λ³Έμ˜ μ›μ‹œ 값이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€.
    => 값에 μ˜ν•œ 전달(pass by value)
숫자(Number)숫자. μ •μˆ˜μ™€ 싀ꡬ ꡬ뢄 없이 ν•˜λ‚˜μ˜ 숫자 νƒ€μž…λ§Œ 쑴재
λ¬Έμžμ—΄(String)λ¬Έμžμ—΄
λΆˆλ¦¬μ–Έ(Boolean)논리적 μ°Έ(true)κ³Ό 거짓(false)
undefinedvar ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ— μ•”λ¬΅μ μœΌλ‘œ ν• λ‹Ήλ˜λŠ” κ°’
null값이 μ—†λ‹€λŠ” 것을 μ˜λ„μ μœΌλ‘œ λͺ…μ‹œν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ°’
μ‹¬λ²Œ(Symbol)ES6μ—μ„œ μΆ”κ°€λœ 7번째 νƒ€μž…

객체 νƒ€μž…(Object/reference Type)

  • 객체(μ°Έμ‘°) νƒ€μž…μ˜ 값은 λ³€κ²½ κ°€λŠ₯ν•œ κ°’(mutable value)이닀.
  • 객체λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜(ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간)μ—λŠ” μ°Έμ‘° 값이 μ €μž₯
  • 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ μ›λ³Έμ˜ 참쑰값이 λ³΅μ‚¬λ˜μ–΄ 전달
    => 참쑰에 μ˜ν•œ 전달(pass by reference)
  • 객체, ν•¨μˆ˜, λ°°μ—΄ λ“±

πŸ“Ž ν•¨μˆ˜

  • μ‹€ν–‰ν•  수 μžˆλŠ” μ½”λ“œ 꾸러미
function 라면끓이기() {
  냄비에넣기(λ¬Ό500cc, κ±΄λ”μ‹œμŠ€ν”„);
  끓인닀();
  냄비에넣기(λ©΄, λΆ„λ§μŠ€ν”„)
  끓인닀();
  λΆˆμ„λˆλ‹€();
  κ·Έλ¦‡μ—λ‹΄λŠ”λ‹€();
}

라면끓이기();

// λ§Œμ•½ 면이 κΌ¬λ“€κΌ¬λ“€ν•œ 라면을 끓이고 μ‹Άλ‹€λ©΄?
// μƒˆλ‘œμš΄ ν•¨μˆ˜ 생성
function 라면꼬듀꼬듀끓이기() {
  냄비에넣기(λ¬Ό500cc, κ±΄λ”μ‹œμŠ€ν”„);
  끓인닀();
  냄비에넣기(λ©΄, λΆ„λ§μŠ€ν”„)
  μ‘°κΈˆλ“μΈλ‹€();
  λΆˆμ„λˆλ‹€();
  κ·Έλ¦‡μ—λ‹΄λŠ”λ‹€();
}

라면꼬듀꼬듀끓이기()

// μƒˆλ‘œμš΄ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ§€ μ•Šκ³  κΈ°μ‘΄ ν•¨μˆ˜μ— 인자λ₯Ό 전달
function 라면끓이기(μ‹œκ°„) {
  냄비에넣기(λ¬Ό500cc, κ±΄λ”μ‹œμŠ€ν”„);
  끓인닀();
  냄비에넣기(λ©΄, λΆ„λ§μŠ€ν”„)
  끓인닀(μ‹œκ°„);
  λΆˆμ„λˆλ‹€();
  κ·Έλ¦‡μ—λ‹΄λŠ”λ‹€();
}

라면끓이기(μ‹œκ°„);

πŸ“Ž 객체

  • (객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ) κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μ΄λ‹€.

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œν† νƒ€μž… 기반(prototype based) 객체지ν–₯ μ–Έμ–΄
    => ν΄λž˜μŠ€κ°€ ν•„μš”μ—†λŠ”(class free) 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
    => ES6μ—μ„œ ν΄λž˜μŠ€κ°€ λ„μž…λ¨

  • μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 거의 "λͺ¨λ“  것"이 객체
    => μ›μ‹œ 값을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 값은 λͺ¨λ‘ 객체

  • 객체(object) : 0개 μ΄μƒμ˜ ν”„λ‘œνΌν‹°λ‘œ κ΅¬μ„±λœ 집합, ν”„λ‘œνΌν‹°λŠ” ν‚€(key)와 κ°’(value)으둜 ꡬ성

πŸ“Ž λ¦¬ν„°λŸ΄(literal)

  • μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호λ₯Ό μ‚¬μš©ν•΄ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ°λ²•(notation)
  • μ’…λ₯˜ : μ •μˆ˜ λ¦¬ν„°λŸ΄, λΆ€λ™μ†Œμˆ˜μ  λ¦¬ν„°λŸ΄, λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄, λΆˆλ¦¬μ–Έ λ¦¬ν„°λŸ΄, 객체 λ¦¬ν„°λŸ΄, λ°°μ—΄ λ¦¬ν„°λŸ΄, ν•¨μˆ˜ λ¦¬ν„°λŸ΄ λ“±

πŸ“Ž μΈμŠ€ν„΄μŠ€(instance)

let myString = new String('hello');
// μ—¬κΈ°μ„œ myString은 String을 바라보고? μžˆλŠ” μΈμŠ€ν„΄μŠ€

=> myString은 λ‹€λ₯Έ 말둜 무엇이라고 ν• κΉŒ? 객체
객체λ₯Ό μΈμŠ€ν„΄μŠ€λΌκ³ λ„ ν•˜κ³  μΈμŠ€ν„΄μŠ€λ₯Ό 객체라고도 ν•œλ‹€.

μΈμŠ€ν„΄μŠ€λŠ” 객체둜 봐도 λ¬΄λ°©ν•˜λ‹€. μƒμ„±μžκ°€ 객체λ₯Ό λ§Œλ“€ λ•Œ, κ·Έ μ‹œμ μ˜ 객체λ₯Ό μΈμŠ€ν„΄μŠ€λΌκ³  ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
- μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μƒμ„±μžμ™€ μΈμŠ€ν„΄μŠ€

  • μΈμŠ€ν„΄μŠ€ : μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•΄ μƒμ„±λœ 객체/κ²°κ³Όλ¬Ό

  • μƒμ„±μž ν•¨μˆ˜(constructor) : new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜μ—¬ 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜

  • hello λŠ” λ¬΄μ—‡μΈκ°€μš”?
    => 객체 λ¦¬ν„°λŸ΄, λ¬Έμžμ—΄, μ›μ‹œ κ°’, μœ μ‚¬λ°°μ—΄κ°μ²΄, μΈμŠ€ν„΄μŠ€ 라고 λΆ€λ₯Ό 수 μžˆλ‹€.

πŸ“Ž this

  • ν•¨μˆ˜ λ˜λŠ” 객체가 싀행될 λ•Œ 이 ν•¨μˆ˜λ‚˜ 객체가 μ–΄λ””μ—μ„œ μ‹€ν–‰λ˜κ³  μžˆλŠ”μ§€λ₯Ό 가리킨닀.
    => thisλŠ” ν˜„μž¬ μ‹€ν–‰λ˜λŠ” μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 가리킨닀.
μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(execution context) : 인터프리터에 μ˜ν•΄ ν˜„μž¬ μ‹€ν–‰λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ˜ ν™˜κ²½μ΄λ‚˜ μŠ€μ½”ν”„
  • 일반 ν•¨μˆ˜λ‘œμ„œ 호좜

=> aboutThis() ν•¨μˆ˜λŠ” window 객체(전역객체) μ•ˆμ— 있고 이 μ•ˆμ—μ„œ ν˜ΈμΆœλ˜μ—ˆμœΌλ―€λ‘œ aboutThis() ν•¨μˆ˜ λ‚΄μ—μ„œ thisλŠ” windowλ₯Ό 가리킨닀.
=> Node.js ν™˜κ²½μ—μ„œλŠ” global을 가리킨닀.

  • λ©”μ„œλ“œλ‘œμ„œ 호좜

=> myObj μ•ˆμ— func()ν•¨μˆ˜λŠ” myObj μ•ˆμ— 있고 이 μ•ˆμ—μ„œ ν˜ΈμΆœλ˜μ—ˆμœΌλ―€λ‘œ myObj.func() ν•¨μˆ˜ λ‚΄μ—μ„œ thisλŠ” myObjλ₯Ό 가리킨닀.
=> μ½˜μ†”μ— 좜λ ₯된 {val: 100, func: Ζ’} μžμ²΄κ°€ myObj의 λ‚΄μš©μ΄λ‹€.

ν•¨μˆ˜ 호좜 방식thisκ°€ κ°€λ¦¬ν‚€λŠ” κ°’
일반 ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœμ „μ—­κ°μ²΄
λ©”μ„œλ“œλ‘œμ„œ ν˜ΈμΆœλ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ 객체(λ§ˆμΉ¨ν‘œ μ•žμ˜ 객체)

=> this에 λŒ€ν•œ λ‚΄μš©μ€ 일단 μ—¬κΈ°κΉŒμ§€ 정리!

μ°Έκ³ 

πŸ“Ž μŠ€μ½”ν”„(scope)

  • ν•¨μˆ˜κ°€ 싀행될 λ•Œ, ν•¨μˆ˜ λ‚΄μ—μ„œ λ³€μˆ˜μ— λŒ€ν•œ 접근이 μ–΄λ–»κ²Œ λ˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μš©μ–΄
  • λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„, λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„ λ˜λŠ” 생쑴 λ²”μœ„

μ „μ—­ μŠ€μ½”ν”„(Global scope)

  • μ½”λ“œ μ–΄λ””μ—μ„œλ“ μ§€ μ°Έμ‘°ν•  수 μžˆλ‹€.
  • μ „μ—­ λ³€μˆ˜(Global variable) : μ „μ—­μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ―Έμ—¬ 어디에든 μ°Έμ‘°ν•  수 μžˆλ‹€.

지역 μŠ€μ½”ν”„(Local scope or Function-level scope)

  • ν•¨μˆ˜ μ½”λ“œ 블둝이 λ§Œλ“  μŠ€μ½”ν”„λ‘œ ν•¨μˆ˜ μžμ‹ κ³Ό ν•˜μœ„ ν•¨μˆ˜μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλ‹€.
  • 지역 λ³€μˆ˜(Local variable) : 지역(ν•¨μˆ˜) λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ΄λ©° κ·Έ 지역과 κ·Έ μ§€μ—­μ˜ ν•˜λΆ€ μ§€μ—­μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλ‹€.
var x = "global x";
var y = "global y";

function outer() {
  var z = "outer's local z";

  console.log(x); // global x
  console.log(y); // global y
  console.log(z); // outer's local z

  function inner() {
    var x = "inner's local x";

    console.log(x); // inner's local x
    console.log(y); // global y
    console.log(z); // outer's local z
  }

  inner();
}

outer();

console.log(x); // global x
console.log(z); // ReferenceError: z is not defined

λΉ„ 블둝 레벨 μŠ€μ½”ν”„(Non block-level-scope)

if (true) {
  // μ½”λ“œ 블둝 λ‚΄μ—μ„œ var x μ„ μ–Έ
  // μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ
  // ν•¨μˆ˜ λ°–μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλ˜μ—ˆλ‹€ 할지라도 λͺ¨λ‘ μ „μ—­ μŠ€μ½”ν”„λ₯Ό 가짐
  var x = "global x";
}

console.log(x); // global x

블둝 레벨 μŠ€μ½”ν”„(Block-level-scope)

  • var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό 따름
  • let의 λ“±μž₯으둜 블둝 레벨 μŠ€μ½”ν”„λ₯Ό ν˜•μ„±ν•˜λŠ” 것이 κ°€λŠ₯해짐
  • letν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ“  μ½”λ“œ 블둝(ν•¨μˆ˜, ifλ¬Έ, forλ¬Έ, whileλ¬Έ, try/catchλ¬Έ λ“±)을 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” 블둝 레
// μ „μ—­ μŠ€μ½”ν”„
let i = 10;

// ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„
function func() {
  let i = 100;

  // 블둝 레벨 μŠ€μ½”ν”„
  for (let i = 1; i < 3; i++) {
    console.log(i); // 1 2
  }

  console.log(i); // 100
}

func();

console.log(i); //10

πŸ“Ž ν΄λ‘œμ €(closure)

// 클둜져, closure : 폐쇄
// ν΄λ‘œμ ΈλŠ” ν…Œν¬λ‹‰μ΄λ‹€ => νμ‡„λœ κ³΅κ°„μ˜ 데이터에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ ν…Œν¬λ‹‰
// νμ‡„λœ 곡간에 μ ‘κ·Όν•  수 μžˆλŠ” ν•¨μˆ˜
function myFunction() {
  var val1 = "hello";
}

// myFunctionμ•ˆμ— μžˆλŠ” val1을 ν•¨μˆ˜ λ°–μ—μ„œ μ“Έ 수 μ—†μŠ΅λ‹ˆλ‹€.
// val1은 myFunction ν•¨μˆ˜ μ•ˆμ— νμ‡„λ˜μ–΄ μžˆλ‹€.

function myFunction2() {
  var val2 = "hello";

  return {
    //리턴을 μ΄μš©ν•΄μ„œ ν•¨μˆ˜ μ•ˆμ˜ 값을 λ°–μœΌλ‘œ λΊ„ 수 μžˆλ‹€.
    // ν•¨μˆ˜λŠ” 객체도 리턴할 수 μžˆλ‹€
    getVal2: function () {
      // getVal1μ΄λΌλŠ” 킀에 μ—°κ²°λœ ν•¨μˆ˜κ°€ μžˆλ‹€.
      return val2; // ν•¨μˆ˜λ‹ˆκΉŒ 리턴을 ν•  수 μžˆμž–μ•„μš” μ΄λ•Œ val2을 λ¦¬ν„΄ν•΄μ€˜μš”
    },
  };
}

let result = myFunction2();

console.log(result.getVal2()); // hello
// μ›λž˜λŒ€λ‘œλΌλ©΄ μ € val2λŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λŠ”건데, ν΄λ‘œμ €λ₯Ό ν†΅ν•΄μ„œ  getVal2을 ν†΅ν•΄μ„œλ§Œ val2에 μ ‘κ·Όν•  수 있게 ν•  수 μžˆμŠ΅λ‹ˆλ‹€

ν΄λ‘œμ €μ˜ ν™œμš©

  • ν΄λ‘œμ €λŠ” μƒνƒœ(state)λ₯Ό μ•ˆμ „ν•˜κ²Œ λ³€κ²½ν•˜κ³  μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • μƒνƒœκ°€ μ˜λ„μΉ˜ μ•Šκ²Œ λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ μƒνƒœλ₯Ό μ•ˆμ „ν•˜κ²Œ 은닉(information hiding)ν•˜κ³  νŠΉμ • ν•¨μˆ˜μ—κ²Œλ§Œ μƒνƒœ 변경을 ν—ˆμš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

πŸ“Ž Math.random - 둜또 번호 뽑기

function randomNum(min, max) {
  return Math.floor(Math.random() * (max - min) + min);
}

// λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œ
// Set을 μ΄μš©ν•΄ 쀑볡 제거
let lottoNum = new Set();

// randomNum을 lottoNum.sizeκ°€ 6이 될 λ•ŒκΉŒμ§€ 뽑기
while (lottoNum.size < 6) {
  lottoNum.add(randomNum(1, 46));
}

// μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬
console.log([...lottoNum].sort((a, b) => a - b));
// λ‹€λ₯Έ 방법 - forEach
let lottoArr = [];
function lottoGenerator() {
  while (lottoArr.length < 6) {
    let result = randomFunc(1, 46);
    let isGot = false;

    // 쀑볡 νŒλ‹¨
    lottoArr.forEach((el) => {
      if (el === result) {
        isGot = true;
      }
    });

    // 쀑볡이 μ—†λ‹€λ©΄ 배열에 μΆ”κ°€
    if (!isGot) {
      lottoArr.push(result);
    }
  }
  return lottoArr;
}

console.log(lottoGenerator());

// λ‹€λ₯Έ 방법 - includes
let lottoArr = [];
function lottoGenerator() {
  while (lottoArr.length < 6) {
    let result = randomFunc(1, 46);
    let isGot = false;

    if (!lottoArr.includes(result)) {
      lottoArr.push(result);
    }
  }
  return lottoArr;
}

console.log(lottoGenerator());

πŸ“Ž DOM(Document Object Model, λ¬Έμ„œ 객체 λͺ¨λΈ)

DOM

  • HTML λ¬Έμ„œμ˜ λ‚΄μš©μ„ νŠΈλ¦¬ν˜•νƒœλ‘œ κ΅¬μ‘°ν™”ν•˜μ—¬ μ›Ή λ¬Έμ„œλ₯Ό λΈŒλΌμš°μ €κ°€ 이해할 수 μžˆλŠ” ꡬ쑰둜 κ΅¬μ„±ν•˜μ—¬ λ©”λͺ¨λ¦¬μ— 적재
    => λͺ¨λ“  μš”μ†Œμ™€ μš”μ†Œμ˜ μ–΄νŠΈλ¦¬λ·°νŠΈ, ν…μŠ€νŠΈλ₯Ό 각각의 객체둜 λ§Œλ“€κ³ , 객체λ₯Ό λΆ€μž κ΄€κ³„λ‘œ ν‘œν˜„ν•  수 μžˆλŠ” 트리ꡬ쑰둜 κ΅¬μ„±ν•œ 것
    μ΄λ•Œ, 각각의 μš”μ†Œμ™€ 속성, μ½˜ν…μΈ λ₯Ό ν‘œν˜„ν•˜λŠ” λ‹¨μœ„λ₯Ό λ…Έλ“œ(node)라고 ν•œλ‹€.
<!DOCTYPE html>
<html>
  <head>
    <style>
      .red  { color: #ff0000; }
      .blue { color: #0000ff; }
    </style>
  </head>
  <body>
    <div>
      <h1>Cities</h1>
      <ul>
        <li id="one" class="red">Seoul</li>
        <li id="two" class="red">London</li>
        <li id="three" class="red">Newyork</li>
        <li id="four">Tokyo</li>
      </ul>
    </div>
  </body>
</html>

[좜처: Poiema Web - DOM tree]

DOM νŠΈλ¦¬μ— μ ‘κ·Όν•˜κΈ°

  • document 객체λ₯Ό 톡해 HTML λ¬Έμ„œμ— μ ‘κ·Όν•  수 μžˆλ‹€.
  • documentλŠ” λΈŒλΌμš°μ €κ°€ 뢈러온 μ›ΉνŽ˜μ΄μ§€λ₯Ό λ‚˜νƒ€λ‚΄λ©°, DOM tree의 μ§„μž…μ (Entry point) 역할을 μˆ˜ν–‰
    => μ΅œμ’…μ μ€ μš”μ†Œμ˜ ν…μŠ€νŠΈλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 객체
// ν•΄λ‹Ήν•˜λŠ” Idλ₯Ό 가진 μš”μ†Œμ— μ ‘κ·Ό
document.getElementById();

// ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“  μš”μ†Œμ— μ ‘κ·Ό
document.getElementsByTagName();

// ν•΄λ‹Ήν•˜λŠ” 클래슀λ₯Ό 가진 λͺ¨λ“  μš”μ†Œμ— μ ‘κ·Ό
document.getElementsByClassName();

// css μ„ νƒμžλ‘œ 단일 μš”μ†Œμ— μ ‘κ·Ό
document.querySelector("selector");

// css μ„ νƒμžλ‘œ μ—¬λŸ¬ μš”μ†Œμ— μ ‘κ·Ό
document.querySelectorAll("selector");

DOM μ œμ–΄ λͺ…λ Ήμ–΄

  • 이벀트 μ‚½μž…
    target.addEventListener(type, listener)
    • type : click, mouseover mouseut, wheel λ“± λ‹€μ–‘ν•œ 이벀트 감지
    • listener ν•¨μˆ˜μ˜ μΈμˆ˜μ—λŠ” μ΄λ²€νŠΈμ— λŒ€ν•œ 정보가 λ‹΄κΉ€
<button class="btn">Click me!</button>
const btn = document.querySelector("button");
//const btn = document.querySelector(".btn"); μœ„μ™€ 같은 μš”μ†Œ μ ‘κ·Ό

btn.addEventListener("click", function() {
  console.log("hello world");
})
  • 클래슀 μ œμ–΄ : DOM APIλ₯Ό 톡해 μš”μ†Œμ˜ class 속성을 μ œμ–΄ν•  수 μžˆλ‹€.
<button class="btn-change">Change color, plz!</button>
const changeBtn = document.querySelector(".btn-change");

changeBtn.addEventListener("click", function() {
  // changeBtn에 "blue"λΌλŠ” 클래슀 μΆ”κ°€
  changeBtn.classList.add("blue");
  
  // changeBtn.classList.remove("blue"); "blue"λΌλŠ” 클래슀 제거
  // changeBtn.classList.toggle("blue"); "blue"λΌλŠ” 클래슀 ν† κΈ€. "blue" ν΄λž˜μŠ€κ°€ μ—†λ‹€λ©΄ 클래슀λ₯Ό μΆ”κ°€ν•˜κ³ , μžˆλ‹€λ©΄ 클래슀 제거
  // changeBtn.classList.contains("blue");  ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ μžˆλŠ”μ§€ 확인
})

πŸ“Ž 개발자 도ꡬ μ½˜μ†”μ°½ 둜그 보쑴

  1. κ°œλ°œμžλ„κ΅¬μ—μ„œ ν†±λ‹ˆλ°”ν€΄(β‘ ) λͺ¨μ–‘ λˆ„λ₯΄κΈ°
  2. Preserve log μ²΄ν¬ν•˜κΈ°
  3. clear()λ₯Ό μž…λ ₯해도 μ°¨λ‹¨λ˜μ–΄ λ‘œκ·Έκ°€ μ§€μ›Œμ§€μ§€ μ•Šκ³  λ³΄μ‘΄λœλ‹€.
    => μ˜€λž«λ™μ•ˆ 디버깅할 λ•Œ 유용

마무리

  • 'μ΄κ±°λŠ” 이거닀!'라고 λͺ…ν™•ν•˜κ²Œ μ΄ν•΄ν•˜κ³  μ‹Άλ‹€.
    => 무엇을? μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  것을 μ˜ˆμ—μ—μ—μ—
    => ν•˜μ§€λ§Œ λ¨Όμ € 찍먹으둜 맛보기! λƒ…λ‹€ λ“€μ΄λŒ€μ§€ 말고
  • λ”₯λ‹€μ΄λΈŒ 책을 μ‚¬μ „μ²˜λŸΌ λͺ¨λ₯΄λŠ” κ±° 있으면 찾아보고 λ‚΄μš©μ„ μž‘μ„±ν•˜λŠ” 쀑이닀.
    => 괜히 마음이 λ“ λ“ , ν•˜μ§€λ§Œ λ¬΄κ±°μ›Œμ„œ 카페 갈 λ•ŒλŠ” λͺ» λ“€κ³  κ°€λŠ”κ²Œ 아쉽닀.
    => κ·Έλž˜λ„ μ‹€λ¬Ό 책이 μ’‹λ‹€!

2개의 λŒ“κΈ€

comment-user-thumbnail
2021λ…„ 12μ›” 5일

this에 κ΄€ν•΄μ„œ 정말 μž˜λ³΄μ•˜μŠ΅λ‹ˆλ‹€!!!

1개의 λ‹΅κΈ€