웹개발

REACT: JavaScript - 01

best_spear_man 2024. 8. 30. 14:59

Why JS?

  • js는 큰 커뮤니티를 가지고 있다.
  • 웹, 어플리케이션 등 개발 가능

JS, HTML, CSS

  • HTML: 요소들의 배치, 내용, 기본 구조 설정
  • CSS: 요소들의 색상, 크기등 스타일 설정
  • JS: 요소들의 동작, 기능 설정

How it works?

  • 웹 브라우저에 탑재된 JS engine으로 실행된다. (개발자도구: f11 혹은 option+command+i)
  • VScode 등의 편집기로 작성할 수 있음
  • script 태그로 js 파일을 불러오는 index.html을 브라우저로 열면 실행해 볼 수 있다. (vscode liveserver expansion 활용)

JS기초(새로 알게된 것만 정리)

1. null 병합 연산자

undefined, null이 아닌 것만 걸러냄

let a;
let b = 10;
console.log(a ?? b); // '10'
let c = 1;
let d = 2;
console.log(c ?? d) // '1'

2. typeof 연산자

type을 스트링으로 반환

let c = 'abc';
let d = typeof c;
console.log(d) // 'String'

3. 화살표 함수

function foo(){...}
let varA = foo;

JS의 함수는 객체 취급이 가능. 즉 변수에 할당 가능!

let varB = function (){...};

아예 변수에 '익명함수(이름이 없는 함수)'를 할당할 수 있음. 이를 아래와 같이 표현 가능.

let varC = (val) => {
    let ret = val;
    ret ++;
    return ret};
let varD = () => 1;

4. 콜백 함수

자신이 아닌 다른 함수에 인수로써 전달된 함수.

function foo(para){
    para();
}
function bar(){
    console.log("bar");
}


foo(bar) // 출력: "bar"

콜 백: 실행 된 뒤, 나중에 실행된다는 뜻. 실제로는 함수가 원하는 타이밍에 호출 가능.

익명함수, 화살표 함수를 인수로 넣을 수 있다.

활용예시: 구조가 유사한 함수들이 여럿 만들어 질 때 코드 개선 가능.

function bar(count,callback){
  for(let i = 1; i<= count; i++){
      callback(i);
  }
}
bar(10, (i)=>{console.log(i);});
bar(10, (i)=>{console.log(i*2);});
bar(10, (i)=>{console.log(i*3);});
// 콜백을 쓰지 않고 여러개의 bar를 만드는 것보다 반복 감소, 변수를 파라미터로 받는것보다 확장성 good.

5. 스코프

변수나 함수에 접근 혹은 호출 가능한 범위의 제한을 뜻한다. 중괄호로 만들어진 블록으로 이를 구분한다.

{let a=10;} 
console.log(a); // -> 오류발생

주의: 반복문, 조건문의 중괄호 블록에서는 스코프 구분이 일어나지 않음.

  • 전역 스코프: 전체 영역에서 접근 가능. 모든 중괄호 밖에서 선언.
  • 지역 스코프: local. 특정 영역에서만 접근 가능. 하나 이상의 중괄호 블록안에 선언.

5. 호이스팅:

함수 선언이 가장 먼저 실행된다 (함수의 호출이 구현보다 윗 줄에 있어도 된다)

6. 객체

객체 기초:

// 객체 생성
let var1 = new Object(); // 객체 생성자 방식
let var2 = {}; // 객체 리터럴 방식

// 객체 프로퍼티(속성)
let var3 = {
    name:"me",
      age:27,
      behave:foo, // 함수 지정가능
    "이것은 문자열 키":true,
      pet:{} // 객체도 지정 가능
}

// 객체 프로퍼티 접근하기
console.log(var.name); // "me"
console.log(var.name_); // "Undefined"
console.log(var["age"]) // "27"
console.log(var["age2"]) // "Undefined"
// 동적으로 프로퍼티에 접근해야할 경우 두번째 방식이 유용하다. (접근에 변수를 이용할 수 있다)

// 새 프로퍼티 추가/ 프로퍼티 수정
var3.new_prop = "its new";
var3["neo"] = 10;
var3.neo = 1;

// 프로퍼티 삭제
delete var3.neo;
delete var3["new_prop"];

// 프로퍼티 존재유무 확인(in)
console.log("name" in var3); // true
console.log("same" in var3); // false

상수 객체: const animal = {name = "alex", age = 10};
상수 객체도 여전히 프로퍼티의 수정, 삭제, 추가 가능하다.

매서드: 함수인 프로퍼티

let var4 = {
    foo: function (){...},
    bar: () => {...},
    method1(){...};
}