코어 자바스크립트 1장: 데이터 타입

송나은·2021년 5월 31일
0

JavaScript

목록 보기
17/23

데이터 타입의 종류

  • 기본형 데이터: 값이 담긴 주솟값을 복제한다. (=불변성)
    ex) String, Number, Boolean, Undefined, Null, 심볼
  • 참조형 데이터: 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다.
    ex) 객체, 배열, 함수,날짜, 정규표현식, map, set, weakmap, weakset

+) iterable 배열 또는 요소가 키-값 쌍으로 구성된 객체

메모리와 데이터

  • 비트: 0 또는 1만 표현할 수 있는 하나의 메모리 조각.
  • 바이트: 8개의 비트로 구성!

변수 선언과 데이터 할당

  • 변수(variable): 변할 수 있는 데이터가 담길 수 있는 공간.
  • 식별자(identifier): 데이터를 식별하는 데 사용하는 이름, 변수명. 데이터가 가지는 메모리 주솟값.
var a;
// 변할 수 있는 데이터를 만든다. 이 데이터의 식별자는 a로 한다. (선언)
a= 'abc'; 
// a라는 식별자를 검색하여 데이터 영역에 저장한 문자열 'abc'를 대입한다.(할당)

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

  • 불변값(immutable): 기본형 데이터는 모두 불변값이다.

상수 vs 불변값

  • 상수: 변수 영역의 메모리에 데이터를 재할당할 수 없다.
  • 불변값: 데이터 영역의 메모리에 데이터를 재할당할 수 없다.
  • 가변값(mutable): 참조형 데이터 자체를 변경한 경우가 아니라 그 내부의 프로퍼티를 변경할 때 '가변값'이라고 한다.
var obj1 = {
a: 1,
b: 'bbb'
};
// 변수 영역에 식별자가 obj1인 데이터를 만든다.
// 데이터 영역에 여러개의 프로퍼티로 이루어진 주소를 저장한다. (-> 기본형 데이터와 차이)
obj1.a = 2
// 새로운 객체가 만들어진 것이 아니라 기존의 객체 내부의 값만 바뀐다.

객체의 변수(프로퍼티) 영역이 별도로 존재한다. 데이터 영역에 저장된 값은 불변값이지만 변수(프로퍼티)에는 다른 값을 얼마든지 대입할 수 있다.

  • Garbage collector : 특정 시점이나 메모리 사용량이 포화 상태에 임박할 때마다 자동으로 수거 대상을 수거한다.

불변객체

값으로 전달받은 객체에 변경을 가하더라도 원본 객체는 변하지 않아야 하는 경우 필요하다.

  • 얕은복사: 바로 아래 단계의 값만 복사하는 방법. 중첩된 객체에서 참조형 데이터가 저장된 프로퍼티를 복사할 때 그 주솟값만 복사한다.

    사본을 바꾸면 원본도 바뀌고, 원본을 바꾸면 사본도 바뀐다.

  • 깊은복사: 내부의 모든 값들을 하나하나 찾아서 전부 복사하는 방법. 참조형 데이터는 내부의 프로퍼티들을 복사해야 한다.

    참조형 데이터를 불변값으로 사용하는 방법

undefined

어떤 변수에 값이 존재하지 않을 경우.

let arr1 = [undefined, 1];
let arr2 = [];
let arr3 = []; 
arr2[1] = 1
arr3.length = 3

console.log(arr2) // [ <1 empty item>, 1 ]
console.log(arr3) // [ <3 empty items> ] undefined조차 할당되어 있지 않음.
console.log(arr1[0]) // undefined: 할당된 값이 undefined인 경우
console.log(arr2[0]) // undefined: 객체 내부의 존재하지 않는 프로퍼티에 접근하는 경우
console.log(arr4) //arr4 is not definded

let arr5 = [,,] //  [ <1 empty item> ] 뒤의 콤마는 의미가 없다아. 배열도 객체!
// length 프로퍼티의 개수만큼 빈 공간을 확보하고 지정하는 것이 아니다.
// 값이 지정되지 않은 인덱스는 '아직은 존재하지 않는 프로퍼티'

비어있는 요소에 접근하려 할 때 반환되는 undefined
-> 순회의 대상이 되지 않고, 배열의 키값(인덱스), 프로퍼티 자체가 존재하지 않는다.

  • 값을 대입하지 않은 변수, 메모리 주소를 지정하지 않은 식별자에 접근할 때
  • 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
  • return문이 없거나 호출되지 않는 함수를 실행한 결과
  • null 사용자가 명시적으로 '없음'을 표현하기 위해 대입한 값.
    자바스크립트 버그 typeof null = object

Reference

코어 자바스크립트 / 정재남

profile
그때그때 공부한 내용과 생각을 기록하는 블로그입니다.

0개의 댓글