Sparta Coding Club/React 기초반, 심화반 [항해 99]

스파르타 코딩클럽 React 리액트 심화반 1주차 정리 - Javascript

김쨔뿌 2021. 9. 30. 20:22

이 글에서 사용하는 모든 A, B, C..a,b,c...는 원하는 값을 넣어서 사용할 수 있다. 정해진 것이 아님.

Javascript

 

변수/상수

변수 (let) : 변하는 값 = 재할당이 가능한 값

상수 (const) : 변하지 않는 값 = 재할당이 불가능한 값

*const로 선언한 객체는 일부 재할당 가능 (자세한건 아래의 객체형 참고.)

*var 은 오류 찾기가 힘들어서 es6부터는 보통 let과 const를 사용한다..!

 

선언하기 let a = 1; 혹은 let a;

선언후 할당하기 a = 1;

 

< 변수와 상수의 선언은 1회만 이루어져야한다. >

가능 불가능
let a = 1;
a = 2;
let a = 1;
let a = 2;

 

scope : 변수가 어디까지 살아있는지의 범위

block-scope 는 {} 내부가 범위라고 생각하면 된다.

 

var let, const
- 함수형 scope. (코드 블럭을 무시!)
- 선언과 초기화를 동시에 함
- 선언이 할당보다 아래에 있어도 작동함
- block-scope
- 선언 후 값이 있어야 초기화가 됨.
- 선언이 무조건 할당보다 위에 있어야함.

 

TDZ (Temporal Dead Zone) 일시적 사각지대

- 선언만 되어있고 초기화 전에 값이 쓰일때 발생하는 에러.

- let이나 const가 선언보다 할당이 위에 있을때 생기는 상태

 

자료형

typeof 연산자로 자료형을 알아낼 수 있다.

ex) typeof 2 = number, typeof "문자" = string ...

 

Javascript는 8가지 기본 자료형을 지원한다.

 

primitive type(원시형)

  • 숫자형 : 정수, 부동 소수점 저장
  • BigInt 형 : 아주 큰 숫자를 저장
  • 문자형 : 문자열을 저장
  • boolean형 : 논리값 true/false
  • undefined : 값이 할당되지 않음, 독립 자료형
  • null : 값이 존재하지 않음, 독립 자료형
  • 심볼형 : 고유 식별자를 만들때 사용
! 심볼형 예시
let A = Symbol("a");
let B = Symbol("a");
이 두가지를 적었을때 A와 B 모두 값은 a지만 "서로 다른" a,
즉 A와 B는 각각 자신만의 a를 가졌기에
A === B 는 false 가 출력된다. 

 

객체형

- 여러타입의 데이터를 담을 수 있다.

- key 와 value로 이루어져있다.

- key 는 무조건 문자! value는 모든 자료형이 가능.

- 선언한 이름.key 로 해당 key에 맞는 value를 찾을 수 있다.

let A = {a: 1, b: 2, c: 3} 를 적었을때 
A.a 는 1, A.b는 2, A.c 는 3 이 나온다.

*객체는 내용물(key와 value)을 말한는것, 선언한 이름은 객체라고 하지 않는다.

 

객체 생성자

- new 를 사용한다.

let a = new A();

 

객체 리터럴

- 중괄호로 객체를 선언한다.

let A = {} ;

* 객체 리터럴로 객체를 선언해도 엔진에서는 객체 생성자로 변경한다.

 

const로 선언한 객체의 경우

const A = {a : 1, b : 2} 를 적은 뒤
A.a = 3 으로 재할당을 해줄경우 A의 a는 이후 3으로 변경된 상태로 사용할 수 있다.

단, A = {a : 3, b : 2} 를 적어 객체 자체의 재할당은 불가능하다. 

 

객체의 참조

https://ko.javascript.info/object-copy

 

참조에 의한 객체 복사

 

ko.javascript.info

위 사이트에서 눈여겨 볼 부분을 정리했다. 

let A = { a : 1 };
let B = A;
A와 B를 위와 같이 선언했을때 B가 가지는건 A 그 자체가 아니라 a:1 이라는 객체이다.
따라서 이후 B.a = 2 ; 를 적어 value 를 변경한다면 A.a 또한 2가 된다.
즉, A 와 B 모두 { a : 1 } 이라는 상시 복제되는 값을 가졌으며
A든 B는 자신이 가진 객체의 값을 변경한다면 이후 원본에 반영된다고 보자.

 

함수

함수 선언문 (독립적인 함수)

function 함수명( ){ }

 

함수 표현식(변수에 들어간 비독립적 함수)

let A = function(){}
혹은 let A = () => {}

- 화살표 함수에서 this 는 부모, 기존 표현식에서는 자기 자신을 말함.

- 함수 생성자는 함수 안에 선언해도 전역함수로 읽혀서 사용에 추천하지 않음.

- 함수 안의 함수표현식은 함수 스코프에 따라 함수 안에서만 사용할 수 있음.

 

함수의 내부변수와 외부변수가 같은 경우 함수 내에서는 내부변수가 우선처리된다.

let a = 1;
function A (){
    let a = 2;
    console.log(a); //2로 출력됨.
}

 

콜백함수

- 인수로 전달된 함수

function A (a){ console.log(a) };
function B (a, x){ x(a) };
B ( "감자", A ); //감자 가 출력된다.

다른 함수에 불려져 이용된 A를 콜백함수라고 부른다.

인수 : argument

매개변수 : parameter

* 매개변수는 인수를 복사한 값. 둘이 비슷하지만 엄연히 다르다.

 

 

Prototype(= 원형)

!!면접에 자주 나옴

- 객체를 생성할때 사용하는 리소스를 최대한 절감한 패턴 

   = 원본 객체를 복제해서 새로운 개체를 만드는 패턴

 

자바스크립트에서의 Prototype

- Javascript는 클래스가 없는 Prototype 기반 동적 언어

- Javascript에서 사용하는 class 는 진짜 class 가 아닌 es6버전부터 지원하는 class 를 따라한 키워드.

- Javascript에서 모든 객체는 Prototype 이 있다.

- Javascript에서 객체를 함수를 사용해서 만들때 함수의 Prototype을 복제해서 만들어진다.

- .prototype 을 통해 Prototype 확인할 수 있다. 

fucntion A (){} //이 부분에서 원본=Prototype은 따로 생성된다.
A.prototype // 여기서의 A는 복제본이다. 

위를 적으면 constructor 은 A, __proto__ 는 Object라 뜨는데
이때 A는 원본을 말하고 __proto__는 원본 A의 prototype 속성을 말한다. 

console에서 __proto__ 는 Prototype Link 를 말한다. 원본의 Prototype 을 보여준다.