자바스크립트 데이터 타입

Chanho Yoon·2021년 6월 7일
0

javascript

목록 보기
1/3

코어자바스크립트를 1회독 하고 정리할 겸 개인 목적으로 정리하는 글입니다.

데이터타입

  • 기본형
  • 참조형

기본형

기본형 데이터에는 숫자, 문자열, boolean, null, undefined이 존재하고 ES6에서 Symbol이 추가되었다.
기본적으로 기본형은 불변값이다.

참조형

참조형 데이터에는 객체, 배열, 함수, 날짜, 정규식이 있다.
기본적으로 참조형은 가변값이다.

변수와 식별자 차이

변수는 어떠한 변할 수 있는 수 즉 데이터를 말하고,
식별자는 어떠한 데이터를 식별하는데 사용하는 이름 즉 변수명을 말한다.

기본형 데이터와 참조형 데이터

불변값

상수변수의 차이는 데이터를 변경할 수 있는지 없는지의 차이이다.

우리가 흔히 불변값이라고 생각하는 상수가 있다.
뜻만보면 변하지 않는 수이니 그렇게 보이기도한다. 그래서 불변값상수를 같은 개념으로 오해하기 쉽다.

불변값상수를 구분 짓는 것은 변수 영역 메모리의 변경가능성이다. 한 번 할당된 변수 공간에 다른 데이터를 재할당할 수 있는지 여부이다.
하지만 불변값데이터 영역 메모리의 변경 가능성이다.

기본형 데이터인 숫자, 문자열, boll, null, undefined, Symbol 모두 불변값이다.

참조형 데이터의 가변값과 불변값

참조형 데이터와 기본형 데이터의 다른 점은 참조형 데이터는 객체의 변수 영역이 별도로 존재합니다.

❗️ 참조형 데이터가 "가변값"이라고 하는 것은 참조형 데이터 자체를 변경할 경우가 아니라 그 내부 프로퍼티를 변경할 때만 성립한다.

불변 객체가 필요할 때

어떠한 값을 전달 받은 객체(원본)에 어떠한 로직으로 인해 변경을 하더라도 그 객체(원본)은 변하지 않아야 하는 경우에 불변성을 유지한 객체가 필요하다.

얕은 복사와 깊은 복사 차이

  • 얕은 복사(shallow copy)는 바로 아래 단계의 값만 복사
    - 원본이 바뀌면 사본도 바뀌고 사본을 바꾸면 원본도 바뀐다.
  • 깊은 복사(deep copy)는 내부의 모든 값들을 전부 복사

어떠한 객체를 복사하는데 그 객체의 모든 값을 복사해서 다른 데이터를 만들고자 할 때는 기본형데이터의 경우 그대로 복사하면 되지만, 참조형 데이터는 계속해서 그 내부의 모든 프로퍼티들을 복사해야 한다.


undefined와 null

undefined 에러가 나는 세 가지 경우

  • 값을 대입하지 않은 변수
  • 객체 내부에 존재하지 않는 프로퍼티에 접근할 때
  • return 문이 없거나, 호출되지 않는 함수의 실행 결과

직접 undefined 사용한 것과 아닌 것

직접 undefined 할당한 것은 그 자체로 값이어서 하나의 값으로 동작되기 때문에 프로퍼티나 배열의 요소에는 고유의 키값이 존재하게 된다.(배열 순회 가능)

반대로 js 엔진에서 어쩔 수 없이 부여한 undefined는 그냥 값이 없음을 나타낸다.

즉 직접 undefined 할당한 것은 데이터가 실존하는 것이고
간접(js 엔진)에서 부여한 undefined는 데이터가 실존하지 않고 말 그대로 값이 없음을 나타낸다.

그럼 null과 undefined 어떻게 사용??

둘이 혼동되는 것은 사실이나 그냥 undefined는 자바스크립트에서 출력하는 에러로만 놔두고 null을 사용하면 되겠다.
어떠한 경우라도 undefined 키워드를 사용하지 않으면 결국 이건 자바스크립트 엔진에서 출력한 것이니까

❗️ null은 object이기 때문에 null인지를 판별하기 위해선 n === null 과 같이 일치 연산자를 사용해서 비교해줘야한다.

0개의 댓글